@pennyfarthing/core 11.1.1 → 11.2.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 +8 -8
- package/package.json +2 -1
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +381 -66
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/init.js +4 -4
- package/packages/core/dist/cli/commands/init.js.map +1 -1
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +4 -5
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/utils/constants.d.ts +3 -8
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +3 -4
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/cli/utils/settings.d.ts +11 -0
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/settings.js +65 -29
- package/packages/core/dist/cli/utils/settings.js.map +1 -1
- package/packages/core/dist/cli/utils/symlinks.js +16 -16
- package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
- package/packages/core/dist/consultation/tandem-metrics.d.ts +91 -0
- package/packages/core/dist/consultation/tandem-metrics.d.ts.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.js +131 -0
- package/packages/core/dist/consultation/tandem-metrics.js.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.test.d.ts +18 -0
- package/packages/core/dist/consultation/tandem-metrics.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.test.js +457 -0
- package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -0
- package/packages/core/dist/public/js/react/react.js +14 -14
- package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.js +691 -0
- package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
- package/packages/core/dist/server/api/agent-load.js +1 -1
- package/packages/core/dist/server/api/agent-load.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.d.ts +16 -11
- package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
- package/packages/core/dist/server/otlp-receiver.js +185 -24
- package/packages/core/dist/server/otlp-receiver.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.test.d.ts +21 -0
- package/packages/core/dist/server/otlp-receiver.test.d.ts.map +1 -0
- package/packages/core/dist/server/otlp-receiver.test.js +446 -0
- package/packages/core/dist/server/otlp-receiver.test.js.map +1 -0
- package/packages/core/dist/server/server.d.ts +0 -3
- package/packages/core/dist/server/server.d.ts.map +1 -1
- package/packages/core/dist/server/server.js +3 -37
- 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 +12 -23
- package/packages/core/dist/server/server.test.js.map +1 -1
- package/packages/core/dist/shared/capabilities.d.ts +88 -0
- package/packages/core/dist/shared/capabilities.d.ts.map +1 -0
- package/packages/core/dist/shared/capabilities.js +133 -0
- package/packages/core/dist/shared/capabilities.js.map +1 -0
- package/packages/core/dist/shared/capabilities.test.d.ts +2 -0
- package/packages/core/dist/shared/capabilities.test.d.ts.map +1 -0
- package/packages/core/dist/shared/capabilities.test.js +217 -0
- package/packages/core/dist/shared/capabilities.test.js.map +1 -0
- package/packages/core/dist/shared/portrait-resolver.d.ts +9 -0
- package/packages/core/dist/shared/portrait-resolver.d.ts.map +1 -1
- package/packages/core/dist/shared/portrait-resolver.js +27 -0
- package/packages/core/dist/shared/portrait-resolver.js.map +1 -1
- package/packages/core/dist/shared/portrait-resolver.test.js +47 -1
- package/packages/core/dist/shared/portrait-resolver.test.js.map +1 -1
- package/packages/core/dist/shared/spawn-prompt.d.ts +47 -0
- package/packages/core/dist/shared/spawn-prompt.d.ts.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.js +82 -0
- package/packages/core/dist/shared/spawn-prompt.js.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.test.d.ts +2 -0
- package/packages/core/dist/shared/spawn-prompt.test.d.ts.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.test.js +251 -0
- package/packages/core/dist/shared/spawn-prompt.test.js.map +1 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts +13 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts.map +1 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.js +126 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.js.map +1 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts +18 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js +434 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +32 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +120 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.js +570 -1
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
- package/pennyfarthing-dist/agents/dev.md +7 -11
- package/pennyfarthing-dist/agents/reviewer.md +9 -3
- package/pennyfarthing-dist/agents/sm-finish.md +18 -1
- package/pennyfarthing-dist/agents/sm-setup.md +1 -1
- package/pennyfarthing-dist/agents/sm.md +2 -2
- package/pennyfarthing-dist/agents/tea.md +1 -1
- package/pennyfarthing-dist/agents/testing-runner.md +2 -1
- package/pennyfarthing-dist/commands/pf-chore.md +2 -2
- package/pennyfarthing-dist/commands/pf-git.md +4 -2
- package/pennyfarthing-dist/commands/pf-standalone.md +7 -2
- package/pennyfarthing-dist/gates/approval.md +63 -0
- package/pennyfarthing-dist/gates/confidence-sm.md +71 -0
- package/pennyfarthing-dist/gates/context-ok.md +56 -0
- package/pennyfarthing-dist/gates/evaluations/confidence-sm.md +54 -0
- package/pennyfarthing-dist/gates/quality-pass.md +67 -0
- package/pennyfarthing-dist/gates/tests-fail.md +84 -0
- package/pennyfarthing-dist/gates/tests-pass.md +79 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +23 -19
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +1 -1
- package/pennyfarthing-dist/guides/bell-mode.md +1 -1
- package/pennyfarthing-dist/guides/bikerack.md +3 -3
- package/pennyfarthing-dist/guides/hooks.md +29 -29
- package/pennyfarthing-dist/guides/reflector.md +1 -1
- package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +2 -2
- package/pennyfarthing-dist/scripts/README.md +1 -1
- package/pennyfarthing-dist/scripts/core/check-context.sh +3 -1
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +5 -87
- package/pennyfarthing-dist/scripts/git/README.md +24 -14
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +5 -266
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +5 -151
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +6 -144
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +5 -496
- package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +4 -183
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +4 -95
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +4 -65
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -31
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +9 -11
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +27 -33
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +4 -71
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -19
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +4 -30
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -32
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +4 -65
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +4 -78
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +4 -93
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/statusline.sh +4 -301
- package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +76 -0
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +4 -221
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +5 -13
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +4 -123
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +4 -33
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +4 -156
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +4 -131
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +4 -249
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +4 -160
- package/pennyfarthing-dist/skills/pf-bc/usage.md +1 -1
- package/pennyfarthing-dist/skills/pf-jira/examples.md +5 -2
- package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -16
- package/pennyfarthing-dist/skills/pf-workflow/skill.md +9 -12
- package/pennyfarthing-dist/skills/pf-workflow/usage.md +33 -8
- package/pennyfarthing-dist/templates/settings.local.json.template +19 -10
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +18 -6
- 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/review-tandem.yaml +65 -0
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +16 -8
- package/pennyfarthing-dist/workflows/tdd.yaml +11 -2
- package/pennyfarthing_scripts/CLAUDE.md +45 -14
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/cli.py +3 -5
- package/pennyfarthing_scripts/bellmode_hook.py +12 -296
- package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/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-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 +119 -0
- package/pennyfarthing_scripts/bikerack/background_panel.py +86 -5
- package/pennyfarthing_scripts/bikerack/base_panel.py +87 -2
- package/pennyfarthing_scripts/bikerack/changed_panel.py +125 -29
- package/pennyfarthing_scripts/bikerack/context_meter_footer.py +88 -0
- package/pennyfarthing_scripts/bikerack/debug_panel.py +32 -2
- package/pennyfarthing_scripts/bikerack/diffs_panel.py +104 -17
- package/pennyfarthing_scripts/bikerack/events.py +28 -0
- package/pennyfarthing_scripts/bikerack/git_panel.py +103 -33
- package/pennyfarthing_scripts/bikerack/launcher.py +15 -15
- package/pennyfarthing_scripts/bikerack/portrait_resolver.py +139 -0
- package/pennyfarthing_scripts/bikerack/progress_panel.py +315 -0
- package/pennyfarthing_scripts/bikerack/sprint_panel.py +395 -32
- package/pennyfarthing_scripts/bikerack/story_detail_data.py +244 -0
- package/pennyfarthing_scripts/bikerack/story_detail_screen.py +176 -0
- package/pennyfarthing_scripts/bikerack/tui.py +575 -37
- package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
- package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/cli.py +42 -65
- package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/pr_config.py +38 -0
- package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__init__.py +1 -0
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/dialogue_manager.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/cli.py +149 -0
- package/pennyfarthing_scripts/consultation/dialogue_manager.py +417 -0
- package/pennyfarthing_scripts/context.py +3 -3
- package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__init__.py +12 -1
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/create_branches.py +3 -4
- package/pennyfarthing_scripts/git/hooks_installer.py +152 -0
- package/pennyfarthing_scripts/git/repos.py +196 -0
- package/pennyfarthing_scripts/git/status_all.py +27 -11
- package/pennyfarthing_scripts/git/worktree.py +302 -0
- package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/cli.py +143 -40
- package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.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__/gate_file.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/cli.py +33 -1
- package/pennyfarthing_scripts/handoff/complete_phase.py +40 -0
- package/pennyfarthing_scripts/handoff/marker.py +15 -15
- package/pennyfarthing_scripts/handoff/phase_check.py +96 -0
- package/pennyfarthing_scripts/handoff/resolve_gate.py +18 -15
- package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__init__.py +437 -0
- package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/bell_mode.py +215 -0
- package/pennyfarthing_scripts/hooks/cli.py +96 -0
- package/pennyfarthing_scripts/hooks/context_breaker.py +104 -0
- package/pennyfarthing_scripts/hooks/context_warning.py +66 -0
- package/pennyfarthing_scripts/hooks/cyclist_pretooluse.py +129 -0
- package/pennyfarthing_scripts/hooks/pre_edit_check.py +78 -0
- package/pennyfarthing_scripts/hooks/reflector_check.py +271 -0
- package/pennyfarthing_scripts/hooks/schema_validation.py +203 -0
- package/pennyfarthing_scripts/hooks/session_start.py +296 -0
- package/pennyfarthing_scripts/hooks/session_stop.py +111 -0
- package/pennyfarthing_scripts/hooks/sprint_yaml_validation.py +97 -0
- package/pennyfarthing_scripts/hooks/statusline.py +420 -0
- package/pennyfarthing_scripts/hooks.py +27 -446
- package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/pretooluse_hook.py +3 -185
- package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/heatmap.py +655 -0
- package/pennyfarthing_scripts/prime/workflow.py +2 -1
- package/pennyfarthing_scripts/schema_validation_hook.py +3 -298
- package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/session/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/session_start_hook.py +4 -186
- package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/loader.py +15 -1
- package/pennyfarthing_scripts/sprint/story_update.py +19 -0
- package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_108_1_gate_migration.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_dialogue_manager.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/test_bikerack.py +51 -51
- package/pennyfarthing_scripts/tests/test_dialogue_manager.py +811 -0
- package/pennyfarthing_scripts/tests/test_handoff_cli.py +16 -11
- package/pennyfarthing_scripts/tests/test_sprint_panel.py +344 -265
- package/pennyfarthing_scripts/tests/test_workflow_check.py +2 -3
- package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/tandem_awareness.py +254 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +19 -0
- package/pennyfarthing_scripts/validate/cli.py +17 -5
- package/pennyfarthing_scripts/welcome_hook.py +3 -149
- package/pennyfarthing_scripts/workflow/__init__.py +40 -0
- package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.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-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/cli.py +1100 -0
- package/pennyfarthing_scripts/workflow/helpers.py +241 -0
- package/pennyfarthing_scripts/{workflow.py → workflow/scale.py} +0 -104
- package/pennyfarthing_scripts/workflow/state.py +112 -0
- package/pennyfarthing_scripts/workflow/team_lifecycle.py +257 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts +0 -10
- package/packages/core/dist/scripts/theme-detail.test.js +0 -199
- package/pennyfarthing-dist/skills/pf-workflow/scripts/list-workflows.sh +0 -91
- package/pennyfarthing-dist/skills/pf-workflow/scripts/resume-workflow.sh +0 -163
- package/pennyfarthing-dist/skills/pf-workflow/scripts/show-workflow.sh +0 -138
- package/pennyfarthing-dist/skills/pf-workflow/scripts/start-workflow.sh +0 -273
- package/pennyfarthing-dist/skills/pf-workflow/scripts/workflow-status.sh +0 -167
- package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<gate name="quality-pass" model="haiku">
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Verify that all project quality gates pass locally — lint, type checks, and
|
|
5
|
+
tests — before handing off to the next phase. This gate wraps the check.py
|
|
6
|
+
quality runner to ensure the codebase is clean enough for Reviewer's time.
|
|
7
|
+
</purpose>
|
|
8
|
+
|
|
9
|
+
<pass>
|
|
10
|
+
Run the quality gate script for the repos listed in the session file:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
source .venv/bin/activate && python3 .pennyfarthing/scripts/workflow/check.py
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The script runs lint, type checks, and tests concurrently. Exit code 0 means
|
|
17
|
+
all checks passed.
|
|
18
|
+
|
|
19
|
+
If ALL checks pass, return:
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
GATE_RESULT:
|
|
23
|
+
status: pass
|
|
24
|
+
gate: quality-pass
|
|
25
|
+
message: "All quality gates passing — lint, typecheck, tests clean."
|
|
26
|
+
checks:
|
|
27
|
+
- name: lint
|
|
28
|
+
status: pass
|
|
29
|
+
detail: "Lint clean"
|
|
30
|
+
- name: typecheck
|
|
31
|
+
status: pass
|
|
32
|
+
detail: "Type checks passing"
|
|
33
|
+
- name: tests
|
|
34
|
+
status: pass
|
|
35
|
+
detail: "All tests passing"
|
|
36
|
+
```
|
|
37
|
+
</pass>
|
|
38
|
+
|
|
39
|
+
<fail>
|
|
40
|
+
If the script exits non-zero, parse its output to identify which checks failed.
|
|
41
|
+
The script prints `[PASS]` or `[FAIL]` for each check (Lint, Type Check, Tests).
|
|
42
|
+
|
|
43
|
+
Return with actionable recovery guidance:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
GATE_RESULT:
|
|
47
|
+
status: fail
|
|
48
|
+
gate: quality-pass
|
|
49
|
+
message: "Quality gate failed: {summary of failures}"
|
|
50
|
+
checks:
|
|
51
|
+
- name: lint
|
|
52
|
+
status: pass | fail
|
|
53
|
+
detail: "{lint results or specific failures}"
|
|
54
|
+
- name: typecheck
|
|
55
|
+
status: pass | fail
|
|
56
|
+
detail: "{typecheck results or specific errors}"
|
|
57
|
+
- name: tests
|
|
58
|
+
status: pass | fail
|
|
59
|
+
detail: "{test results or failing test details}"
|
|
60
|
+
recovery:
|
|
61
|
+
- "Fix lint errors: run `npm run lint` to see details"
|
|
62
|
+
- "Fix type errors: run `tsc --noEmit` to see details"
|
|
63
|
+
- "Fix failing tests: run `pnpm test` to see details"
|
|
64
|
+
```
|
|
65
|
+
</fail>
|
|
66
|
+
|
|
67
|
+
</gate>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<gate name="tests-fail" model="haiku">
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Verify tests are RED — failing tests exist that cover the acceptance
|
|
5
|
+
criteria. TEA has written tests but implementation hasn't started.
|
|
6
|
+
This gate runs after the TEA agent's red phase to confirm the codebase
|
|
7
|
+
has proper test coverage before Dev begins implementation.
|
|
8
|
+
</purpose>
|
|
9
|
+
|
|
10
|
+
<pass>
|
|
11
|
+
Run these checks and report results:
|
|
12
|
+
|
|
13
|
+
1. **Failing tests exist:** Run the project test suite for the repos listed in the session file.
|
|
14
|
+
- For `pennyfarthing` repo: `cd pennyfarthing && python3 -m pytest` or `pnpm test`
|
|
15
|
+
- Record: total tests, passed, failed, skipped
|
|
16
|
+
- At least one test MUST be failing (RED state)
|
|
17
|
+
|
|
18
|
+
2. **Tests cover acceptance criteria:** Read the session file's Acceptance Criteria section.
|
|
19
|
+
- Cross-reference test names/descriptions against each AC
|
|
20
|
+
- Each AC should have at least one corresponding test
|
|
21
|
+
|
|
22
|
+
3. **Tests are committed:** Run `git status --porcelain` to check for uncommitted test files.
|
|
23
|
+
- All test files should be committed to the branch
|
|
24
|
+
- No uncommitted test files should exist
|
|
25
|
+
|
|
26
|
+
If ALL checks pass, return:
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
GATE_RESULT:
|
|
30
|
+
status: pass
|
|
31
|
+
gate: tests-fail
|
|
32
|
+
message: "{N} failing tests covering {M} acceptance criteria. Tests committed."
|
|
33
|
+
checks:
|
|
34
|
+
- name: failing-tests
|
|
35
|
+
status: pass
|
|
36
|
+
detail: "{failed}/{total} tests failing (RED state confirmed)"
|
|
37
|
+
- name: ac-coverage
|
|
38
|
+
status: pass
|
|
39
|
+
detail: "All {M} acceptance criteria have test coverage"
|
|
40
|
+
- name: tests-committed
|
|
41
|
+
status: pass
|
|
42
|
+
detail: "All test files committed to branch"
|
|
43
|
+
```
|
|
44
|
+
</pass>
|
|
45
|
+
|
|
46
|
+
<fail>
|
|
47
|
+
If ANY check fails, diagnose and report:
|
|
48
|
+
|
|
49
|
+
1. **No failing tests found:** TEA didn't write tests or tests are already passing.
|
|
50
|
+
- This means implementation may have leaked into the red phase
|
|
51
|
+
- Or tests are not properly asserting against unimplemented code
|
|
52
|
+
|
|
53
|
+
2. **Tests don't cover ACs:** Some acceptance criteria lack test coverage.
|
|
54
|
+
- List which ACs are missing tests
|
|
55
|
+
- TEA needs to add additional test cases
|
|
56
|
+
|
|
57
|
+
3. **Tests aren't committed:** Uncommitted test files exist.
|
|
58
|
+
- List uncommitted test files
|
|
59
|
+
- TEA needs to commit before handoff
|
|
60
|
+
|
|
61
|
+
Return with actionable recovery guidance:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
GATE_RESULT:
|
|
65
|
+
status: fail
|
|
66
|
+
gate: tests-fail
|
|
67
|
+
message: "Gate failed: {summary of what's missing}"
|
|
68
|
+
checks:
|
|
69
|
+
- name: failing-tests
|
|
70
|
+
status: pass | fail
|
|
71
|
+
detail: "{description of test state}"
|
|
72
|
+
- name: ac-coverage
|
|
73
|
+
status: pass | fail
|
|
74
|
+
detail: "{list of uncovered ACs}"
|
|
75
|
+
- name: tests-committed
|
|
76
|
+
status: pass | fail
|
|
77
|
+
detail: "{list of uncommitted files}"
|
|
78
|
+
recovery:
|
|
79
|
+
- "Write failing tests for: {uncovered ACs}"
|
|
80
|
+
- "Commit test files: git add {files} && git commit"
|
|
81
|
+
```
|
|
82
|
+
</fail>
|
|
83
|
+
|
|
84
|
+
</gate>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<gate name="tests-pass" model="haiku">
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Verify that all tests pass and the working tree is clean before handing off
|
|
5
|
+
to the reviewer. This gate runs after the Dev agent's implementation phase
|
|
6
|
+
to confirm the codebase is in a GREEN state.
|
|
7
|
+
</purpose>
|
|
8
|
+
|
|
9
|
+
<pass>
|
|
10
|
+
Run these checks and report results:
|
|
11
|
+
|
|
12
|
+
1. **Test suite:** Run the project test suite for the repos listed in the session file.
|
|
13
|
+
- For `pennyfarthing` repo: `cd pennyfarthing && pnpm test`
|
|
14
|
+
- For `orchestrator` repo: tests in the orchestrator root if applicable
|
|
15
|
+
- Record: total tests, passed, failed, skipped
|
|
16
|
+
|
|
17
|
+
2. **Working tree:** Run `git status --porcelain` in each repo listed in session `**Repos:**`.
|
|
18
|
+
- Verify no uncommitted or untracked files (empty output = clean)
|
|
19
|
+
|
|
20
|
+
3. **Branch status:** Run `git branch --show-current` and `git log --oneline -1`.
|
|
21
|
+
- Confirm on the expected feature branch from session `**Branch:**`
|
|
22
|
+
|
|
23
|
+
If ALL checks pass, return:
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
GATE_RESULT:
|
|
27
|
+
status: pass
|
|
28
|
+
gate: tests-pass
|
|
29
|
+
message: "All {N} tests passing. Working tree clean. Branch: {branch}"
|
|
30
|
+
checks:
|
|
31
|
+
- name: test-suite
|
|
32
|
+
status: pass
|
|
33
|
+
detail: "{passed}/{total} tests passing ({skipped} skipped)"
|
|
34
|
+
- name: working-tree
|
|
35
|
+
status: pass
|
|
36
|
+
detail: "No uncommitted changes"
|
|
37
|
+
- name: branch-status
|
|
38
|
+
status: pass
|
|
39
|
+
detail: "On branch {branch}, HEAD at {short-sha}"
|
|
40
|
+
```
|
|
41
|
+
</pass>
|
|
42
|
+
|
|
43
|
+
<fail>
|
|
44
|
+
If ANY check fails, diagnose and report:
|
|
45
|
+
|
|
46
|
+
1. **Failing tests:** List each failing test file and line number.
|
|
47
|
+
- Run tests with verbose output to capture failure details.
|
|
48
|
+
- Group failures by file.
|
|
49
|
+
|
|
50
|
+
2. **Dirty working tree:** List uncommitted and untracked files.
|
|
51
|
+
- Run `git status --porcelain` and report each file with its status code.
|
|
52
|
+
|
|
53
|
+
3. **Wrong branch:** Report actual vs expected branch name.
|
|
54
|
+
|
|
55
|
+
Return with actionable recovery guidance:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
GATE_RESULT:
|
|
59
|
+
status: fail
|
|
60
|
+
gate: tests-pass
|
|
61
|
+
message: "Gate failed: {summary of failures}"
|
|
62
|
+
checks:
|
|
63
|
+
- name: test-suite
|
|
64
|
+
status: pass | fail
|
|
65
|
+
detail: "{description of test results or failures}"
|
|
66
|
+
- name: working-tree
|
|
67
|
+
status: pass | fail
|
|
68
|
+
detail: "{list of uncommitted files, or 'clean'}"
|
|
69
|
+
- name: branch-status
|
|
70
|
+
status: pass | fail
|
|
71
|
+
detail: "{branch info or mismatch details}"
|
|
72
|
+
recovery:
|
|
73
|
+
- "Fix failing tests in: {file1}, {file2}"
|
|
74
|
+
- "Commit or stash uncommitted changes before handoff"
|
|
75
|
+
- "Switch to correct branch: git checkout {expected-branch}"
|
|
76
|
+
```
|
|
77
|
+
</fail>
|
|
78
|
+
|
|
79
|
+
</gate>
|
|
@@ -49,7 +49,7 @@ On activation, check session file for a `**Tandem:**` line (e.g., `**Tandem:** a
|
|
|
49
49
|
|
|
50
50
|
**If tandem is configured:**
|
|
51
51
|
|
|
52
|
-
1. **Resolve backseat persona** from theme
|
|
52
|
+
1. **Resolve backseat persona** from theme using the `pf theme`
|
|
53
53
|
```bash
|
|
54
54
|
THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
|
|
55
55
|
PARTNER_CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
|
|
@@ -98,16 +98,17 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
98
98
|
## Reflector
|
|
99
99
|
|
|
100
100
|
<critical>
|
|
101
|
-
**EVERY TURN MUST END WITH A CYCLIST MARKER
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
101
|
+
**Cyclist only:** EVERY TURN MUST END WITH A CYCLIST MARKER. Stop hook enforces this.
|
|
102
|
+
**CLI mode:** Do NOT emit CYCLIST markers — they are inert outside Cyclist.
|
|
103
|
+
|
|
104
|
+
| Situation | Cyclist Marker | CLI Behavior |
|
|
105
|
+
|-----------|---------------|--------------|
|
|
106
|
+
| Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` | Use AGENT_COMMAND `action` field |
|
|
107
|
+
| Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` | Tell user to `/clear` then run agent |
|
|
108
|
+
| Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` | Ask user directly |
|
|
109
|
+
| Open-ended question | `<!-- CYCLIST:QUESTION:open -->` | Ask user directly |
|
|
110
|
+
| Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` | Ask user directly |
|
|
111
|
+
| Everything else | `<!-- CYCLIST:CONTINUE -->` | (no marker needed) |
|
|
111
112
|
</critical>
|
|
112
113
|
|
|
113
114
|
---
|
|
@@ -124,7 +125,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
124
125
|
- If fail → fix issues, retry from step 3 (max 3 retries)
|
|
125
126
|
- If pass → continue
|
|
126
127
|
7. `pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
|
|
127
|
-
8. `pf handoff marker {next_agent}` →
|
|
128
|
+
8. `pf handoff marker {next_agent}` → AGENT_COMMAND block
|
|
129
|
+
9. **Act on AGENT_COMMAND:**
|
|
130
|
+
- Has `marker:` field → emit the CYCLIST marker (Cyclist path)
|
|
131
|
+
- `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
|
|
132
|
+
- `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
|
|
133
|
+
- No action, no marker → output `fallback` text and EXIT
|
|
128
134
|
|
|
129
135
|
**Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
|
|
130
136
|
</agent-exit-protocol>
|
|
@@ -135,14 +141,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
135
141
|
On activation, check if story phase belongs to you:
|
|
136
142
|
|
|
137
143
|
```bash
|
|
138
|
-
|
|
139
|
-
# If OWNER != your agent → emit handoff marker and EXIT
|
|
144
|
+
pf handoff phase-check {your_agent_name}
|
|
140
145
|
```
|
|
141
146
|
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
<!-- CYCLIST:HANDOFF:/{OWNER} -->
|
|
147
|
+
If result has `action: "redirect"`:
|
|
145
148
|
|
|
146
|
-
|
|
147
|
-
|
|
149
|
+
- **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
|
|
151
|
+
- **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
|
|
148
152
|
</wrong-phase-detection>
|
|
@@ -175,7 +175,7 @@ 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=$(
|
|
178
|
+
OWNER=$(pf workflow phase-check {workflow} {phase})
|
|
179
179
|
```
|
|
180
180
|
|
|
181
181
|
**If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
@@ -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
|
-
| `
|
|
29
|
+
| `pf 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 |
|
|
@@ -92,10 +92,10 @@ Client-side detection is URL-based: the presence of `?panel=X` triggers standalo
|
|
|
92
92
|
|
|
93
93
|
| File | Purpose |
|
|
94
94
|
|------|---------|
|
|
95
|
-
| `.
|
|
96
|
-
| `.
|
|
95
|
+
| `.wheelhub-port` | Port number, written after `server.listen()` — readiness signal |
|
|
96
|
+
| `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
|
|
97
97
|
|
|
98
|
-
Both are deleted on shutdown.
|
|
98
|
+
Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
|
|
99
99
|
|
|
100
100
|
## Layout Persistence
|
|
101
101
|
|
|
@@ -4,7 +4,7 @@ Pennyfarthing uses Claude Code hooks to integrate with session lifecycle events
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
Hooks are
|
|
7
|
+
Hooks are commands that Claude Code runs at specific events:
|
|
8
8
|
|
|
9
9
|
| Hook Type | When It Runs | Purpose |
|
|
10
10
|
|-----------|--------------|---------|
|
|
@@ -16,18 +16,18 @@ Hooks are shell scripts that Claude Code runs at specific events:
|
|
|
16
16
|
|
|
17
17
|
### SessionStart Hooks
|
|
18
18
|
|
|
19
|
-
#### session-start
|
|
19
|
+
#### pf hooks session-start
|
|
20
20
|
|
|
21
|
-
**Location:**
|
|
21
|
+
**Location:** `pf hooks session-start`
|
|
22
22
|
|
|
23
23
|
Initializes the Pennyfarthing environment:
|
|
24
24
|
- Creates `.session/` directory structure
|
|
25
25
|
- Clears stale agent state from previous sessions
|
|
26
26
|
- Sets `PROJECT_ROOT` and `SESSION_ID` environment variables
|
|
27
27
|
|
|
28
|
-
#### session-stop
|
|
28
|
+
#### pf hooks session-stop
|
|
29
29
|
|
|
30
|
-
**Location:**
|
|
30
|
+
**Location:** `pf hooks session-stop`
|
|
31
31
|
|
|
32
32
|
Cleans up session state when Claude Code exits.
|
|
33
33
|
|
|
@@ -44,68 +44,68 @@ Project-specific environment setup. Edit this file to:
|
|
|
44
44
|
|
|
45
45
|
**Location:** `.pennyfarthing/scripts/hooks/otel-auto-config.sh`
|
|
46
46
|
|
|
47
|
-
Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.
|
|
47
|
+
Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.wheelhub-port` file and sets `OTEL_EXPORTER_OTLP_PROTOCOL` and `OTEL_EXPORTER_OTLP_ENDPOINT` to route Claude Code telemetry to the running Cyclist/BikeRack server.
|
|
48
48
|
|
|
49
|
-
#### welcome
|
|
49
|
+
#### pf hooks session-start (welcome)
|
|
50
50
|
|
|
51
|
-
**Location:**
|
|
51
|
+
**Location:** `pf hooks session-start`
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Welcome display is now folded into `pf hooks session-start`. In CLI mode, shows ASCII art. In Cyclist mode, sends a WebSocket message to display the logo. Runs once per session (lock file guard).
|
|
54
54
|
|
|
55
55
|
### PreToolUse Hooks
|
|
56
56
|
|
|
57
|
-
#### pre-edit-check
|
|
57
|
+
#### pf hooks pre-edit-check
|
|
58
58
|
|
|
59
|
-
**Location:**
|
|
59
|
+
**Location:** `pf hooks pre-edit-check`
|
|
60
60
|
|
|
61
61
|
Protects sensitive files from accidental edits:
|
|
62
62
|
- Blocks: `.env`, `.pem`, `.key`, credentials, secrets
|
|
63
63
|
- Blocks: `.git/`, `node_modules/`, `vendor/`
|
|
64
64
|
- Blocks: `.pennyfarthing/*` (managed files)
|
|
65
65
|
|
|
66
|
-
#### cyclist-pretooluse
|
|
66
|
+
#### pf hooks cyclist-pretooluse
|
|
67
67
|
|
|
68
|
-
**Location:**
|
|
68
|
+
**Location:** `pf hooks cyclist-pretooluse`
|
|
69
69
|
|
|
70
70
|
Cyclist-specific pre-tool validation. Runs additional safety checks when operating inside Cyclist.
|
|
71
71
|
|
|
72
|
-
#### context-warning
|
|
72
|
+
#### pf hooks context-warning
|
|
73
73
|
|
|
74
|
-
**Location:**
|
|
74
|
+
**Location:** `pf hooks context-warning`
|
|
75
75
|
|
|
76
76
|
Warns agents when context usage is high. Outputs a warning at 60% usage and a critical warning at 85%. Never blocks — warning only (always exits 0).
|
|
77
77
|
|
|
78
|
-
#### context-
|
|
78
|
+
#### pf hooks context-breaker
|
|
79
79
|
|
|
80
|
-
**Location:**
|
|
80
|
+
**Location:** `pf hooks context-breaker`
|
|
81
81
|
|
|
82
|
-
Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `context-warning
|
|
82
|
+
Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `pf hooks context-warning`, this **blocks tool execution** (exit 2). Auto-saves the active agent to a checkpoint so `/pf-session continue` can restore it with FULL tier context.
|
|
83
83
|
|
|
84
|
-
#### schema-validation
|
|
84
|
+
#### pf hooks schema-validation
|
|
85
85
|
|
|
86
|
-
**Location:**
|
|
86
|
+
**Location:** `pf hooks schema-validation`
|
|
87
87
|
|
|
88
88
|
Validates file writes against XML schema rules for agent definitions, workflow files, and other structured content.
|
|
89
89
|
|
|
90
|
-
#### sprint-yaml
|
|
90
|
+
#### pf hooks sprint-yaml
|
|
91
91
|
|
|
92
|
-
**Location:**
|
|
92
|
+
**Location:** `pf hooks sprint-yaml`
|
|
93
93
|
|
|
94
94
|
Validates sprint YAML files on write to prevent structural corruption.
|
|
95
95
|
|
|
96
96
|
### PostToolUse Hooks
|
|
97
97
|
|
|
98
|
-
#### bell-mode
|
|
98
|
+
#### pf hooks bell-mode
|
|
99
99
|
|
|
100
|
-
**Location:**
|
|
100
|
+
**Location:** `pf hooks bell-mode`
|
|
101
101
|
|
|
102
102
|
Bell mode message injection. Checks the bell mode queue and injects queued messages into the agent's context at the next tool execution. Also handles tandem observation injection.
|
|
103
103
|
|
|
104
|
-
####
|
|
104
|
+
#### pf hooks reflector-check
|
|
105
105
|
|
|
106
|
-
**Location:**
|
|
106
|
+
**Location:** `pf hooks reflector-check`
|
|
107
107
|
|
|
108
|
-
Stop hook enforcing that every agent turn ends with a CYCLIST marker. Detects questions, handoff phrases, and validates marker presence. Blocks turns without valid markers in Cyclist mode.
|
|
108
|
+
Stop hook enforcing that every agent turn ends with a CYCLIST marker. Detects questions, handoff phrases, and validates marker presence. Blocks turns without valid markers in Cyclist mode.
|
|
109
109
|
|
|
110
110
|
### Git Hooks
|
|
111
111
|
|
|
@@ -133,7 +133,7 @@ Hooks are configured in `.claude/settings.local.json`:
|
|
|
133
133
|
"hooks": [
|
|
134
134
|
{
|
|
135
135
|
"type": "command",
|
|
136
|
-
"command": "
|
|
136
|
+
"command": "pf hooks session-start"
|
|
137
137
|
}
|
|
138
138
|
]
|
|
139
139
|
}
|
|
@@ -144,7 +144,7 @@ Hooks are configured in `.claude/settings.local.json`:
|
|
|
144
144
|
"hooks": [
|
|
145
145
|
{
|
|
146
146
|
"type": "command",
|
|
147
|
-
"command": "
|
|
147
|
+
"command": "pf hooks pre-edit-check"
|
|
148
148
|
}
|
|
149
149
|
]
|
|
150
150
|
}
|
|
@@ -41,7 +41,7 @@ Marker pattern: /<!--\s*CYCLIST:(\w+)(?::([^>]+?))?\s*-->/gi
|
|
|
41
41
|
| `packages/cyclist/src/public/components/QuickActions.tsx` | Renders action buttons from detected markers |
|
|
42
42
|
| `packages/cyclist/src/public/hooks/useMarkerActions.ts` | Detects markers, builds action metadata |
|
|
43
43
|
| `pennyfarthing-dist/scripts/hooks/question_reflector_check.py` | Stop hook — enforces marker presence |
|
|
44
|
-
| `
|
|
44
|
+
| `pf hooks reflector-check` | CLI entry point for stop hook |
|
|
45
45
|
|
|
46
46
|
## Enforcement Hook
|
|
47
47
|
|
|
@@ -13,7 +13,7 @@ Primary Agent (Opus) Backseat Agent (Haiku, background)
|
|
|
13
13
|
│ │ .session/{story}-tandem-{partner}.md
|
|
14
14
|
│ │
|
|
15
15
|
├── PostToolUse hook fires ────┤
|
|
16
|
-
│ bell-mode
|
|
16
|
+
│ pf hooks bell-mode detects │
|
|
17
17
|
│ new observation, injects │
|
|
18
18
|
│ "[Tandem] Character: ..." │
|
|
19
19
|
│ │
|
|
@@ -163,8 +163,8 @@ For active, synchronous agent-to-agent questions (as opposed to passive observat
|
|
|
163
163
|
| `observation-writer.ts` | Built | TypeScript API for observation file I/O |
|
|
164
164
|
| `file-watch.ts` | Built | File system change detection |
|
|
165
165
|
| `tool-watch.ts` | Built | Tool call log monitoring |
|
|
166
|
-
| `bell-mode
|
|
166
|
+
| `pf hooks bell-mode` | Built | PostToolUse hook with tandem injection |
|
|
167
167
|
| `bellmode_hook.py` | Built | Python implementation of bell mode hook |
|
|
168
|
-
| `statusline
|
|
168
|
+
| `pf hooks statusline` | Built | CLI statusline with tandem indicator |
|
|
169
169
|
| `tandem-backseat.md` | Built | Backseat agent prompt template |
|
|
170
170
|
| `agent-behavior.md` | Built | Shared agent behavior with tandem protocol |
|
|
@@ -86,8 +86,8 @@ Ports are stored in the session file and passed to agents.
|
|
|
86
86
|
| Command | Purpose |
|
|
87
87
|
|---------|---------|
|
|
88
88
|
| `/pf-session parallel` | Start a new parallel work session |
|
|
89
|
-
|
|
|
90
|
-
|
|
|
89
|
+
| `pf git worktree list` | Show active worktrees |
|
|
90
|
+
| `pf git worktree remove <name>` | Clean up a worktree |
|
|
91
91
|
|
|
92
92
|
## TDD Flow in Worktrees
|
|
93
93
|
|
|
@@ -104,7 +104,7 @@ Agents use worktree paths from session file for all operations.
|
|
|
104
104
|
When story is complete, SM archives the session and the worktree can be removed:
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
|
-
|
|
107
|
+
pf git worktree remove wt-5-3a
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
This removes:
|
|
@@ -124,7 +124,7 @@ Tags used by agents participating in the TDD workflow cycle (SM, TEA, Dev, Revie
|
|
|
124
124
|
|
|
125
125
|
**Purpose:** Verify agent owns the current workflow phase before proceeding. Prevents agents from acting on stories they shouldn't own.
|
|
126
126
|
|
|
127
|
-
**Usage:** SM, TEA, Dev, Reviewer - runs `phase-
|
|
127
|
+
**Usage:** SM, TEA, Dev, Reviewer - runs `pf workflow phase-check` on activation to determine correct owner.
|
|
128
128
|
|
|
129
129
|
```markdown
|
|
130
130
|
<phase-check>
|
|
@@ -132,7 +132,7 @@ Tags used by agents participating in the TDD workflow cycle (SM, TEA, Dev, Revie
|
|
|
132
132
|
|
|
133
133
|
Read `**Workflow:**` and `**Phase:**` from session. Query:
|
|
134
134
|
```bash
|
|
135
|
-
OWNER=$(
|
|
135
|
+
OWNER=$(pf workflow phase-check {workflow} {phase})
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
**If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
@@ -11,7 +11,7 @@ scripts/
|
|
|
11
11
|
├── sprint/ # Sprint YAML operations (migrated to pf sprint CLI)
|
|
12
12
|
├── story/ # Story operations (create-story.sh)
|
|
13
13
|
├── jira/ # Jira integration (jira-claim-story.sh)
|
|
14
|
-
├── git/ # Git operations (
|
|
14
|
+
├── git/ # Git operations (deprecated shims → pf git CLI)
|
|
15
15
|
├── theme/ # Theme operations (list-themes.sh)
|
|
16
16
|
├── test/ # Test infrastructure (test-setup.sh)
|
|
17
17
|
├── lib/ # Shared bash libraries (common.sh, logging.sh)
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
set -euo pipefail
|
|
14
14
|
|
|
15
|
+
echo "DEPRECATED: check-context.sh — use 'pf context' instead" >&2
|
|
16
|
+
|
|
15
17
|
# Find project root (where pennyfarthing_scripts lives)
|
|
16
18
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
17
19
|
|
|
@@ -154,7 +156,7 @@ if last_total:
|
|
|
154
156
|
status = 'HIGH' if usable_pct > $WARNING_THRESHOLD else 'OK'
|
|
155
157
|
relay = '$RELAY_MODE' == 'true'
|
|
156
158
|
tirepump = (relay or '$PERMISSION_MODE' == 'turbo') and usable_pct > $TIREPUMP_THRESHOLD
|
|
157
|
-
is_cyclist = os.environ.get('CYCLIST') == '1' or Path('$PROJECT_DIR/packages/cyclist/.
|
|
159
|
+
is_cyclist = os.environ.get('CYCLIST') == '1' or Path('$PROJECT_DIR/packages/cyclist/.wheelhub-port').exists()
|
|
158
160
|
|
|
159
161
|
print(f'CONTEXT_TOKENS={last_total}')
|
|
160
162
|
print(f'CONTEXT_PERCENT={total_pct}')
|