@pennyfarthing/core 11.0.0 → 11.1.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 +81 -23
- package/package.json +1 -1
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts +20 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js +278 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js.map +1 -0
- package/packages/core/dist/cli/utils/constants.d.ts +8 -2
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +4 -1
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/cli/utils/constants.test.d.ts +10 -0
- package/packages/core/dist/cli/utils/constants.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/constants.test.js +38 -0
- package/packages/core/dist/cli/utils/constants.test.js.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.d.ts +139 -0
- package/packages/core/dist/consultation/consultation-protocol.d.ts.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.js +178 -0
- package/packages/core/dist/consultation/consultation-protocol.js.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.test.d.ts +20 -0
- package/packages/core/dist/consultation/consultation-protocol.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.test.js +474 -0
- package/packages/core/dist/consultation/consultation-protocol.test.js.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.d.ts +75 -0
- package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.js +334 -0
- package/packages/core/dist/consultation/dialogue-manager.js.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.test.d.ts +19 -0
- package/packages/core/dist/consultation/dialogue-manager.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.test.js +444 -0
- package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -0
- package/packages/core/dist/public/js/react/react.js +3 -3
- package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
- package/packages/core/dist/scripts/theme-detail.test.js +199 -0
- package/packages/core/dist/server/api/git.d.ts +13 -1
- package/packages/core/dist/server/api/git.d.ts.map +1 -1
- package/packages/core/dist/server/api/git.js +53 -34
- package/packages/core/dist/server/api/git.js.map +1 -1
- package/packages/core/dist/server/api/health-score.d.ts.map +1 -1
- package/packages/core/dist/server/api/health-score.js +25 -1
- package/packages/core/dist/server/api/health-score.js.map +1 -1
- package/packages/core/dist/server/api/settings.d.ts.map +1 -1
- package/packages/core/dist/server/api/settings.js +63 -1
- package/packages/core/dist/server/api/settings.js.map +1 -1
- package/packages/core/dist/server/api/theme-agents.d.ts.map +1 -1
- package/packages/core/dist/server/api/theme-agents.js +61 -0
- package/packages/core/dist/server/api/theme-agents.js.map +1 -1
- package/packages/core/dist/server/server.d.ts.map +1 -1
- package/packages/core/dist/server/server.js +17 -12
- package/packages/core/dist/server/server.js.map +1 -1
- package/packages/core/dist/shared/skill-search.test.js +2 -2
- package/packages/core/dist/workflow/gate-file-validation.d.ts +49 -0
- package/packages/core/dist/workflow/gate-file-validation.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.js +157 -0
- package/packages/core/dist/workflow/gate-file-validation.js.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.test.d.ts +19 -0
- package/packages/core/dist/workflow/gate-file-validation.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.test.js +536 -0
- package/packages/core/dist/workflow/gate-file-validation.test.js.map +1 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.d.ts +14 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.js +339 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.js.map +1 -0
- package/packages/core/dist/workflow/handoff.js +2 -2
- package/packages/core/dist/workflow/handoff.js.map +1 -1
- package/packages/core/dist/workflow/handoff.test.js +16 -0
- package/packages/core/dist/workflow/handoff.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts +4 -2
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +43 -8
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/pennyfarthing-dist/agents/README.md +6 -14
- package/pennyfarthing-dist/agents/architect.md +43 -29
- package/pennyfarthing-dist/agents/ba.md +30 -29
- package/pennyfarthing-dist/agents/dev.md +32 -43
- package/pennyfarthing-dist/agents/devops.md +57 -21
- package/pennyfarthing-dist/agents/orchestrator.md +3 -10
- package/pennyfarthing-dist/agents/pm.md +45 -31
- package/pennyfarthing-dist/agents/reviewer.md +20 -66
- package/pennyfarthing-dist/agents/sm-setup.md +2 -2
- package/pennyfarthing-dist/agents/sm.md +8 -30
- package/pennyfarthing-dist/agents/tea.md +25 -41
- package/pennyfarthing-dist/agents/tech-writer.md +33 -90
- package/pennyfarthing-dist/agents/ux-designer.md +39 -39
- package/pennyfarthing-dist/commands/benchmark-control.md +8 -64
- package/pennyfarthing-dist/commands/benchmark.md +8 -480
- package/pennyfarthing-dist/commands/job-fair.md +8 -97
- package/pennyfarthing-dist/commands/pf-benchmark-control.md +70 -0
- package/pennyfarthing-dist/commands/pf-benchmark.md +486 -0
- package/pennyfarthing-dist/commands/pf-chore.md +4 -4
- package/pennyfarthing-dist/commands/pf-ci.md +40 -0
- package/pennyfarthing-dist/commands/pf-close-epic.md +9 -27
- package/pennyfarthing-dist/commands/pf-continue-session.md +9 -213
- package/pennyfarthing-dist/commands/pf-create-branches-from-story.md +11 -353
- package/pennyfarthing-dist/commands/pf-docs.md +28 -0
- package/pennyfarthing-dist/commands/pf-epic.md +67 -0
- package/pennyfarthing-dist/commands/pf-git-cleanup.md +11 -52
- package/pennyfarthing-dist/commands/pf-git.md +75 -0
- package/pennyfarthing-dist/commands/pf-help.md +110 -128
- package/pennyfarthing-dist/commands/pf-job-fair.md +102 -0
- package/pennyfarthing-dist/commands/pf-new-work.md +9 -18
- package/pennyfarthing-dist/commands/pf-parallel-work.md +6 -66
- package/pennyfarthing-dist/commands/pf-release.md +11 -76
- package/pennyfarthing-dist/commands/pf-repo-status.md +11 -44
- package/pennyfarthing-dist/commands/pf-run-ci.md +8 -111
- package/pennyfarthing-dist/commands/pf-session.md +51 -0
- package/pennyfarthing-dist/commands/pf-solo.md +447 -0
- package/pennyfarthing-dist/commands/pf-sprint-planning.md +8 -104
- package/pennyfarthing-dist/commands/pf-standalone.md +1 -1
- package/pennyfarthing-dist/commands/pf-start-epic.md +9 -163
- package/pennyfarthing-dist/commands/pf-sync-epic-to-jira.md +8 -179
- package/pennyfarthing-dist/commands/pf-sync-work-with-sprint.md +8 -368
- package/pennyfarthing-dist/commands/pf-update-domain-docs.md +8 -78
- package/pennyfarthing-dist/commands/solo.md +8 -442
- package/pennyfarthing-dist/guides/agent-behavior.md +13 -13
- package/pennyfarthing-dist/guides/agent-coordination.md +7 -7
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -5
- package/pennyfarthing-dist/guides/bikerack.md +128 -0
- package/pennyfarthing-dist/guides/brownfield-tools.md +133 -0
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +2 -2
- package/pennyfarthing-dist/guides/gate-schema.md +227 -0
- package/pennyfarthing-dist/guides/gates.md +120 -0
- package/pennyfarthing-dist/guides/handoff-cli.md +116 -0
- package/pennyfarthing-dist/guides/hooks.md +86 -4
- package/pennyfarthing-dist/guides/output-styles.md +65 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +5 -5
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -4
- package/pennyfarthing-dist/guides/prompt-patterns.md +5 -5
- package/pennyfarthing-dist/guides/reflector.md +4 -4
- package/pennyfarthing-dist/guides/session-artifacts.md +1 -1
- package/pennyfarthing-dist/guides/skill-schema.md +1 -1
- package/pennyfarthing-dist/guides/tandem-protocol.md +13 -1
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +5 -4
- package/pennyfarthing-dist/personas/themes/hogans-heroes.yaml +11 -22
- package/pennyfarthing-dist/personas/themes/stephen-king.yaml +13 -24
- package/pennyfarthing-dist/scripts/core/dialogue-manager.sh +322 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +1 -1
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +19 -14
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +191 -57
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +26 -10
- package/pennyfarthing-dist/skills/pf-changelog/SKILL.md +4 -4
- package/pennyfarthing-dist/skills/pf-sprint/skill.md +1 -1
- package/pennyfarthing-dist/skills/skill-registry.schema.json +4 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +5 -0
- package/pennyfarthing-dist/workflows/2party-tdd.yaml +11 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +2 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +4 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +4 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +3 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +3 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +2 -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_bidirectional_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/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/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/__main__.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__/debug_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.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__/sprint_panel.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/cli.py +10 -11
- package/pennyfarthing_scripts/bikerack/debug_panel.py +218 -0
- package/pennyfarthing_scripts/bikerack/diffs_panel.py +203 -27
- 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 +114 -0
- 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/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/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/__init__.py +0 -0
- package/pennyfarthing_scripts/epic/cli.py +64 -0
- package/pennyfarthing_scripts/gate/__init__.py +1 -0
- package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/cli.py +56 -0
- package/pennyfarthing_scripts/gate/validate.py +266 -0
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__init__.py +0 -0
- package/pennyfarthing_scripts/git_group/cli.py +100 -0
- package/pennyfarthing_scripts/handoff/__init__.py +1 -0
- 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 +120 -0
- package/pennyfarthing_scripts/handoff/complete_phase.py +155 -0
- package/pennyfarthing_scripts/handoff/gate_file.py +105 -0
- package/pennyfarthing_scripts/handoff/gate_runner.py +152 -0
- package/pennyfarthing_scripts/handoff/marker.py +109 -0
- package/pennyfarthing_scripts/handoff/resolve_gate.py +152 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/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/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__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/epic.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__/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/prime/__pycache__/__init__.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/workflow.py +39 -0
- package/pennyfarthing_scripts/session/__init__.py +0 -0
- package/pennyfarthing_scripts/session/cli.py +87 -0
- 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/story_finish.py +14 -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_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/test_108_1_gate_migration.py +540 -0
- package/pennyfarthing_scripts/tests/test_108_2_remove_handoff_fallback.py +339 -0
- package/pennyfarthing_scripts/tests/test_confidence_sm_evaluation.py +253 -0
- package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +315 -0
- package/pennyfarthing_scripts/tests/test_gate_file_resolution.py +341 -0
- package/pennyfarthing_scripts/tests/test_gate_runner.py +620 -0
- package/pennyfarthing_scripts/tests/test_handoff_cli.py +929 -0
- package/pennyfarthing_scripts/tests/test_handoff_e2e.py +454 -0
- package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +464 -0
- 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__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/skill_command.py +200 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +64 -0
- package/pennyfarthing_scripts/validate/cli.py +15 -4
- package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
- package/packages/core/dist/scripts/benchmark-integration.js +0 -691
- package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
- package/pennyfarthing-dist/agents/handoff.md +0 -250
- package/pennyfarthing-dist/agents/sm-handoff.md +0 -152
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -112
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira.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/jira/__pycache__/compat.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/migration/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
|
@@ -18,6 +18,20 @@ Every feature you add is a feature you have to maintain. Every "nice to have" st
|
|
|
18
18
|
**A shipped MVP beats a planned masterpiece.**
|
|
19
19
|
</ruthless-prioritization>
|
|
20
20
|
|
|
21
|
+
<critical>
|
|
22
|
+
**No code.** Plans and prioritizes. Handoff to Dev for implementation.
|
|
23
|
+
|
|
24
|
+
- **CAN:** Analyze backlog, define ACs, estimate effort, set priorities
|
|
25
|
+
- **CANNOT:** Write code, coordinate implementation (that's SM)
|
|
26
|
+
</critical>
|
|
27
|
+
|
|
28
|
+
<on-activation>
|
|
29
|
+
1. Context already loaded by prime
|
|
30
|
+
2. Assess current progress (completed vs remaining points)
|
|
31
|
+
3. Identify blockers and priorities
|
|
32
|
+
4. Present strategic options to user
|
|
33
|
+
</on-activation>
|
|
34
|
+
|
|
21
35
|
<helpers>
|
|
22
36
|
**Model:** haiku | **Execution:** foreground (sequential)
|
|
23
37
|
|
|
@@ -35,18 +49,16 @@ FILE_LIST: "{comma-separated file paths}"
|
|
|
35
49
|
```
|
|
36
50
|
</parameters>
|
|
37
51
|
|
|
52
|
+
<delegation>
|
|
53
|
+
## What I Do vs What Helper Does
|
|
38
54
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<skills>
|
|
47
|
-
- `/pf-sprint` - Sprint status, backlog, story management
|
|
48
|
-
- `/pf-sprint story` - Story creation, sizing, and management
|
|
49
|
-
</skills>
|
|
55
|
+
| I Do (Opus) | Helper Does (Haiku) |
|
|
56
|
+
|-------------|---------------------|
|
|
57
|
+
| Prioritization decisions | Scan backlog for candidates |
|
|
58
|
+
| Sprint goal setting | Calculate velocity metrics |
|
|
59
|
+
| Epic selection rationale | Query Jira for status |
|
|
60
|
+
| Stakeholder communication | Gather file summaries |
|
|
61
|
+
</delegation>
|
|
50
62
|
|
|
51
63
|
<reasoning-mode>
|
|
52
64
|
|
|
@@ -70,24 +82,6 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
|
|
|
70
82
|
**Turn Efficiency:** See `agent-behavior.md` -> Turn Efficiency Protocol
|
|
71
83
|
</reasoning-mode>
|
|
72
84
|
|
|
73
|
-
<on-activation>
|
|
74
|
-
1. Context already loaded by prime
|
|
75
|
-
2. Assess current progress (completed vs remaining points)
|
|
76
|
-
3. Identify blockers and priorities
|
|
77
|
-
4. Present strategic options to user
|
|
78
|
-
</on-activation>
|
|
79
|
-
|
|
80
|
-
<delegation>
|
|
81
|
-
## What I Do vs What Helper Does
|
|
82
|
-
|
|
83
|
-
| I Do (Opus) | Helper Does (Haiku) |
|
|
84
|
-
|-------------|---------------------|
|
|
85
|
-
| Prioritization decisions | Scan backlog for candidates |
|
|
86
|
-
| Sprint goal setting | Calculate velocity metrics |
|
|
87
|
-
| Epic selection rationale | Query Jira for status |
|
|
88
|
-
| Stakeholder communication | Gather file summaries |
|
|
89
|
-
</delegation>
|
|
90
|
-
|
|
91
85
|
<workflows>
|
|
92
86
|
## Key Workflows
|
|
93
87
|
|
|
@@ -139,8 +133,28 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
|
|
|
139
133
|
**Action:** "Architect, need design for Epic X"
|
|
140
134
|
</handoffs>
|
|
141
135
|
|
|
136
|
+
<tandem-consultation>
|
|
137
|
+
## Tandem Consultation (Partner)
|
|
138
|
+
|
|
139
|
+
When spawned for consultation by a leader agent, respond in this format:
|
|
140
|
+
```markdown
|
|
141
|
+
**Recommendation:** {concise product/priority advice}
|
|
142
|
+
**Rationale:** {why from a product perspective}
|
|
143
|
+
**Watch-Out-For:** {scope creep, user impact, stakeholder concerns}
|
|
144
|
+
**Confidence:** {high|medium|low}
|
|
145
|
+
**Token Count:** {approximate tokens}
|
|
146
|
+
```
|
|
147
|
+
Stay within the token budget. Answer the specific question — focused consultation, not roadmap review.
|
|
148
|
+
</tandem-consultation>
|
|
149
|
+
|
|
150
|
+
<skills>
|
|
151
|
+
- `/pf-sprint` - Sprint status, backlog, story management
|
|
152
|
+
- `/pf-sprint story` - Story creation, sizing, and management
|
|
153
|
+
</skills>
|
|
154
|
+
|
|
142
155
|
<exit>
|
|
143
|
-
|
|
156
|
+
Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker).
|
|
144
157
|
|
|
145
|
-
|
|
158
|
+
Nothing after the marker. EXIT.
|
|
146
159
|
</exit>
|
|
160
|
+
</output>
|
|
@@ -21,18 +21,12 @@ Assume the code is broken until you prove otherwise. Your job is to be the last
|
|
|
21
21
|
**DO NOT RUBBER-STAMP.** A clean preflight means NOTHING. Tests pass? So what - tests can be wrong. Your job is to HUNT for problems the preflight missed.
|
|
22
22
|
</critical>
|
|
23
23
|
|
|
24
|
-
<critical>
|
|
25
|
-
**HANDOFF REQUIRES MARKER OUTPUT.** After `handoff` subagent returns:
|
|
26
|
-
Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
|
|
27
|
-
</critical>
|
|
28
|
-
|
|
29
24
|
<helpers>
|
|
30
|
-
**Model:** haiku | **Pre-flight:** background
|
|
25
|
+
**Model:** haiku | **Pre-flight:** background
|
|
31
26
|
|
|
32
27
|
| Subagent | Purpose |
|
|
33
28
|
|----------|---------|
|
|
34
29
|
| `reviewer-preflight` | Run tests, lint, gather smells (background) |
|
|
35
|
-
| `handoff` | Update session for approve/reject |
|
|
36
30
|
</helpers>
|
|
37
31
|
|
|
38
32
|
<parameters>
|
|
@@ -45,26 +39,6 @@ REPOS: "{REPOS}"
|
|
|
45
39
|
BRANCH: "{BRANCH}"
|
|
46
40
|
PR_NUMBER: "{PR_NUMBER}"
|
|
47
41
|
```
|
|
48
|
-
|
|
49
|
-
### handoff (approval)
|
|
50
|
-
```yaml
|
|
51
|
-
STORY_ID: "{STORY_ID}"
|
|
52
|
-
WORKFLOW: "{WORKFLOW}"
|
|
53
|
-
CURRENT_PHASE: "review"
|
|
54
|
-
REPOS: "{REPOS}"
|
|
55
|
-
VERDICT: "approved"
|
|
56
|
-
ASSESSMENT_SECTION: "Reviewer Assessment"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### handoff (rejection)
|
|
60
|
-
```yaml
|
|
61
|
-
STORY_ID: "{STORY_ID}"
|
|
62
|
-
WORKFLOW: "{WORKFLOW}"
|
|
63
|
-
CURRENT_PHASE: "review"
|
|
64
|
-
REPOS: "{REPOS}"
|
|
65
|
-
VERDICT: "rejected"
|
|
66
|
-
ASSESSMENT_SECTION: "Reviewer Assessment"
|
|
67
|
-
```
|
|
68
42
|
</parameters>
|
|
69
43
|
|
|
70
44
|
<phase-check>
|
|
@@ -75,7 +49,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
|
|
|
75
49
|
OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
76
50
|
```
|
|
77
51
|
|
|
78
|
-
**If OWNER != "reviewer":** Run `handoff
|
|
52
|
+
**If OWNER != "reviewer":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
79
53
|
</phase-check>
|
|
80
54
|
|
|
81
55
|
<on-activation>
|
|
@@ -120,14 +94,6 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
|
120
94
|
**Blocking Rule:** Any Critical or High = REJECT.
|
|
121
95
|
</severity-levels>
|
|
122
96
|
|
|
123
|
-
<handoff-gate>
|
|
124
|
-
## MANDATORY: Complete Before Exiting
|
|
125
|
-
|
|
126
|
-
- [ ] Write Reviewer Assessment to session file
|
|
127
|
-
- [ ] **If APPROVED:** Merge PR directly with `gh pr merge {PR_NUMBER} --merge --delete-branch`
|
|
128
|
-
- [ ] Spawn `handoff` subagent with VERDICT (approved/rejected)
|
|
129
|
-
- [ ] Verify handoff completed (subagent emits marker)
|
|
130
|
-
</handoff-gate>
|
|
131
97
|
|
|
132
98
|
<assessment-templates>
|
|
133
99
|
## Assessment Templates
|
|
@@ -156,42 +122,30 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
|
156
122
|
```
|
|
157
123
|
</assessment-templates>
|
|
158
124
|
|
|
159
|
-
<exit
|
|
160
|
-
## Exit Sequence
|
|
161
|
-
|
|
125
|
+
<exit>
|
|
162
126
|
### If APPROVED:
|
|
163
|
-
1. Write Reviewer Assessment
|
|
164
|
-
2.
|
|
165
|
-
|
|
166
|
-
gh pr merge {PR_NUMBER} --merge --delete-branch
|
|
167
|
-
```
|
|
168
|
-
3. Update session phase to `finish`
|
|
169
|
-
4. Spawn `handoff` subagent with VERDICT=approved
|
|
170
|
-
5. Await `HANDOFF_RESULT` with `next_agent` (will be `sm`)
|
|
171
|
-
6. **ABSOLUTE LAST ACTION:**
|
|
172
|
-
```bash
|
|
173
|
-
.pennyfarthing/scripts/core/handoff-marker.sh sm
|
|
174
|
-
```
|
|
175
|
-
7. Output result verbatim and EXIT
|
|
127
|
+
1. Write Reviewer Assessment (verdict: APPROVED)
|
|
128
|
+
2. Merge PR: `gh pr merge {PR_NUMBER} --merge --delete-branch`
|
|
129
|
+
3. Follow <agent-exit-protocol> (resolve-gate → complete-phase review→finish → marker sm)
|
|
176
130
|
|
|
177
131
|
### If REJECTED:
|
|
178
|
-
1. Write Reviewer Assessment
|
|
179
|
-
2.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
132
|
+
1. Write Reviewer Assessment (verdict: REJECTED, with severity table)
|
|
133
|
+
2. Follow <agent-exit-protocol> (resolve-gate → complete-phase review→green → marker dev)
|
|
134
|
+
|
|
135
|
+
Nothing after the marker. EXIT.
|
|
136
|
+
</exit>
|
|
137
|
+
|
|
138
|
+
<tandem-consultation>
|
|
139
|
+
## Tandem Consultation (Leader)
|
|
140
|
+
|
|
141
|
+
When your workflow phase has `tandem.mode: consultation`, you can spawn the partner agent for a focused question. Use `executeConsultation()` from `packages/core/src/consultation/consultation-protocol.ts`.
|
|
142
|
+
|
|
143
|
+
**When to consult:** Uncertain about severity of a finding, need domain context for review.
|
|
186
144
|
|
|
187
|
-
**
|
|
188
|
-
</
|
|
145
|
+
**If consultation fails:** Continue solo — consultation is advisory, not blocking.
|
|
146
|
+
</tandem-consultation>
|
|
189
147
|
|
|
190
148
|
<skills>
|
|
191
149
|
- `/pf-code-review` - Review checklists, security/performance patterns
|
|
192
150
|
- `/pf-testing` - Test commands for verification
|
|
193
151
|
</skills>
|
|
194
|
-
|
|
195
|
-
<exit>
|
|
196
|
-
Nothing after the marker. EXIT.
|
|
197
|
-
</exit>
|
|
@@ -211,7 +211,7 @@ SETUP_RESULT:
|
|
|
211
211
|
next_agent: "{tea|dev|orchestrator}"
|
|
212
212
|
|
|
213
213
|
next_steps:
|
|
214
|
-
- "Setup complete.
|
|
214
|
+
- "Setup complete. Run exit protocol to transition to {next_agent}."
|
|
215
215
|
- "Workflow '{workflow}' routes to: {next_agent}"
|
|
216
216
|
- "Session file ready at: {session_file}"
|
|
217
217
|
```
|
|
@@ -231,7 +231,7 @@ SETUP_RESULT:
|
|
|
231
231
|
|
|
232
232
|
next_steps:
|
|
233
233
|
- "Setup complete. This is a STEPPED workflow."
|
|
234
|
-
- "DO NOT
|
|
234
|
+
- "DO NOT run exit protocol. Tell user to run: /pf-workflow start {WORKFLOW}"
|
|
235
235
|
- "Session file ready at: {session_file}"
|
|
236
236
|
```
|
|
237
237
|
|
|
@@ -24,11 +24,6 @@ The moment you start reading implementation files or planning how code should wo
|
|
|
24
24
|
- **CANNOT:** Write/edit code, TodoWrite, plan implementation details
|
|
25
25
|
</critical>
|
|
26
26
|
|
|
27
|
-
<critical>
|
|
28
|
-
**HANDOFF REQUIRES MARKER OUTPUT.** After `sm-handoff` returns:
|
|
29
|
-
Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
|
|
30
|
-
</critical>
|
|
31
|
-
|
|
32
27
|
<critical>
|
|
33
28
|
Use `pf jira <command>` for all Jira interactions. Key commands:
|
|
34
29
|
```
|
|
@@ -48,7 +43,6 @@ If they are broken, COMPLAIN LOUDLY
|
|
|
48
43
|
| `sm-setup` | MODE=research (backlog scan) OR MODE=setup (story setup) |
|
|
49
44
|
| `sm-finish` | PHASE=preflight (checks) OR PHASE=execute (archive) |
|
|
50
45
|
| `sm-file-summary` | Summarize implementation files for context |
|
|
51
|
-
| `sm-handoff` | Session update + handoff to TEA/Dev |
|
|
52
46
|
</helpers>
|
|
53
47
|
|
|
54
48
|
<parameters>
|
|
@@ -83,14 +77,6 @@ BRANCH: "{BRANCH}"
|
|
|
83
77
|
FILE_LIST: "{comma-separated file paths}"
|
|
84
78
|
```
|
|
85
79
|
|
|
86
|
-
### sm-handoff
|
|
87
|
-
```yaml
|
|
88
|
-
STORY_ID: "{STORY_ID}"
|
|
89
|
-
NEXT_AGENT: "{tea|dev|ux-designer|orchestrator}"
|
|
90
|
-
NEXT_PHASE: "{red|implement|design}"
|
|
91
|
-
WORKFLOW: "{WORKFLOW}"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
80
|
**Phase names must match workflow YAML exactly.** Use the phase `name` field from the workflow definition:
|
|
95
81
|
- `tdd`/`tdd-tandem`: setup → `red` → green → review → finish
|
|
96
82
|
- `bdd`/`bdd-tandem`: setup → `design` → red → green → review → finish
|
|
@@ -138,7 +124,7 @@ Prime script provides workflow state. Route based on state from activation outpu
|
|
|
138
124
|
</critical>
|
|
139
125
|
</finish-flow>
|
|
140
126
|
|
|
141
|
-
<new-
|
|
127
|
+
<session-new-flow>
|
|
142
128
|
## New Work Flow
|
|
143
129
|
|
|
144
130
|
> **Triggered when:** `NEW_WORK_STATE`
|
|
@@ -181,9 +167,9 @@ Present to user:
|
|
|
181
167
|
```
|
|
182
168
|
|
|
183
169
|
4. **Route based on workflow type:**
|
|
184
|
-
- **Phased workflow** →
|
|
170
|
+
- **Phased workflow** → Run exit protocol: `pf handoff complete-phase` then `pf handoff marker`
|
|
185
171
|
- **Stepped workflow** → Tell user to run `/pf-workflow start {workflow}` (no handoff)
|
|
186
|
-
</new-
|
|
172
|
+
</session-new-flow>
|
|
187
173
|
|
|
188
174
|
<merge-gate>
|
|
189
175
|
## Merge Gate (BLOCKING)
|
|
@@ -208,7 +194,7 @@ ls .session/{story-id}-session.md || echo "BLOCKED: No session file"
|
|
|
208
194
|
|
|
209
195
|
**If session file does not exist → DO NOT HANDOFF. Run sm-setup first.**
|
|
210
196
|
|
|
211
|
-
Before
|
|
197
|
+
Before handoff, verify ALL of these:
|
|
212
198
|
- [ ] Session file EXISTS: `.session/{story-id}-session.md`
|
|
213
199
|
- [ ] Session has `**Workflow:**` field set
|
|
214
200
|
- [ ] Session has `**Phase:**` field set to `setup`
|
|
@@ -268,7 +254,7 @@ SM does NOT hand off to agents. Instead, use `/pf-workflow start {name}` to begi
|
|
|
268
254
|
**If story has a stepped workflow tag:**
|
|
269
255
|
1. Create session file with workflow tracking
|
|
270
256
|
2. Tell user: "This story uses the `{workflow}` stepped workflow. Run `/pf-workflow start {workflow}` to begin."
|
|
271
|
-
3. **DO NOT
|
|
257
|
+
3. **DO NOT run exit protocol** — stepped workflows don't use agent handoffs
|
|
272
258
|
</workflow-routing>
|
|
273
259
|
|
|
274
260
|
<phase-check>
|
|
@@ -279,7 +265,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
|
|
|
279
265
|
OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
280
266
|
```
|
|
281
267
|
|
|
282
|
-
**If OWNER != "sm":** Run `handoff
|
|
268
|
+
**If OWNER != "sm":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
283
269
|
|
|
284
270
|
**Note:** SM also handles `approved` status (finish phase).
|
|
285
271
|
</phase-check>
|
|
@@ -290,16 +276,8 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
|
290
276
|
</skills>
|
|
291
277
|
|
|
292
278
|
<exit>
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
1. Verify pre-handoff checklist
|
|
296
|
-
2. Spawn `sm-handoff`
|
|
297
|
-
3. Await `HANDOFF_RESULT` with `next_agent`
|
|
298
|
-
4. **ABSOLUTE LAST ACTION:**
|
|
299
|
-
```bash
|
|
300
|
-
.pennyfarthing/scripts/core/handoff-marker.sh {next_agent}
|
|
301
|
-
```
|
|
302
|
-
5. Output result verbatim and EXIT
|
|
279
|
+
1. Verify pre-handoff checklist (see <gate>)
|
|
280
|
+
2. Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker)
|
|
303
281
|
|
|
304
282
|
Nothing after the marker. EXIT.
|
|
305
283
|
</exit>
|
|
@@ -18,18 +18,12 @@ Every line of code you DON'T test is a bug waiting to happen. Your tests aren't
|
|
|
18
18
|
**A test suite that catches nothing catches nothing.**
|
|
19
19
|
</test-paranoia>
|
|
20
20
|
|
|
21
|
-
<critical>
|
|
22
|
-
**HANDOFF REQUIRES MARKER OUTPUT.** After `handoff` subagent returns:
|
|
23
|
-
Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
|
|
24
|
-
</critical>
|
|
25
|
-
|
|
26
21
|
<helpers>
|
|
27
22
|
**Model:** haiku | **Execution:** foreground (sequential)
|
|
28
23
|
|
|
29
24
|
| Subagent | Purpose |
|
|
30
25
|
|----------|---------|
|
|
31
26
|
| `testing-runner` | Run tests, gather results |
|
|
32
|
-
| `handoff` | Update session for handoff to Dev |
|
|
33
27
|
</helpers>
|
|
34
28
|
|
|
35
29
|
<parameters>
|
|
@@ -43,15 +37,6 @@ RUN_ID: "{STORY_ID}-tea-red"
|
|
|
43
37
|
STORY_ID: "{STORY_ID}"
|
|
44
38
|
```
|
|
45
39
|
|
|
46
|
-
### handoff
|
|
47
|
-
```yaml
|
|
48
|
-
STORY_ID: "{STORY_ID}"
|
|
49
|
-
WORKFLOW: "{WORKFLOW}"
|
|
50
|
-
CURRENT_PHASE: "red"
|
|
51
|
-
REPOS: "{REPOS}"
|
|
52
|
-
TEST_RESULT: "RED"
|
|
53
|
-
ASSESSMENT_SECTION: "TEA Assessment"
|
|
54
|
-
```
|
|
55
40
|
</parameters>
|
|
56
41
|
|
|
57
42
|
<phase-check>
|
|
@@ -62,7 +47,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
|
|
|
62
47
|
OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
63
48
|
```
|
|
64
49
|
|
|
65
|
-
**If OWNER != "tea":** Run `handoff
|
|
50
|
+
**If OWNER != "tea":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
66
51
|
</phase-check>
|
|
67
52
|
|
|
68
53
|
<on-activation>
|
|
@@ -76,7 +61,7 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
|
76
61
|
| I Do (Opus) | Helper Does (Haiku) |
|
|
77
62
|
|-------------|-------------------|
|
|
78
63
|
| Read story, plan test strategy | Run tests, report results |
|
|
79
|
-
| Write test code |
|
|
64
|
+
| Write test code | Execute mechanical checks |
|
|
80
65
|
| Make judgment calls | Execute mechanical checks |
|
|
81
66
|
| Assess if tests are needed | |
|
|
82
67
|
</delegation>
|
|
@@ -95,7 +80,7 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
|
|
|
95
80
|
- Commit: `git commit -m "test: add failing tests for X-Y"`
|
|
96
81
|
4. **Spawn `testing-runner`** to verify RED state
|
|
97
82
|
5. Write TEA Assessment to session file
|
|
98
|
-
6. **
|
|
83
|
+
6. **Run exit protocol** (see `<agent-exit-protocol>` in agent-behavior guide)
|
|
99
84
|
|
|
100
85
|
## Chore Bypass Criteria
|
|
101
86
|
|
|
@@ -108,18 +93,10 @@ TEA may skip test writing for:
|
|
|
108
93
|
**If bypassing:** Document reason in session file, hand directly to Dev.
|
|
109
94
|
</workflow>
|
|
110
95
|
|
|
111
|
-
<handoff-gate>
|
|
112
|
-
## MANDATORY: Complete Before Exiting
|
|
113
|
-
|
|
114
|
-
- [ ] Write TEA Assessment to session file
|
|
115
|
-
- [ ] Spawn `handoff` subagent
|
|
116
|
-
- [ ] Verify handoff completed (subagent emits marker)
|
|
117
|
-
</handoff-gate>
|
|
118
|
-
|
|
119
96
|
<assessment-template>
|
|
120
97
|
## TEA Assessment Template
|
|
121
98
|
|
|
122
|
-
Write to session file BEFORE
|
|
99
|
+
Write to session file BEFORE starting exit protocol:
|
|
123
100
|
|
|
124
101
|
```markdown
|
|
125
102
|
## TEA Assessment
|
|
@@ -137,18 +114,28 @@ Write to session file BEFORE spawning handoff:
|
|
|
137
114
|
```
|
|
138
115
|
</assessment-template>
|
|
139
116
|
|
|
140
|
-
<exit
|
|
141
|
-
|
|
117
|
+
<exit>
|
|
118
|
+
1. Write TEA Assessment to session file (see <assessment-template>)
|
|
119
|
+
2. Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker)
|
|
142
120
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
121
|
+
Nothing after the marker. EXIT.
|
|
122
|
+
</exit>
|
|
123
|
+
|
|
124
|
+
<tandem-consultation>
|
|
125
|
+
## Tandem Consultation (Leader + Partner)
|
|
126
|
+
|
|
127
|
+
**As leader:** When your workflow phase has `tandem.mode: consultation`, spawn the partner for test strategy questions. Use `executeConsultation()` from `packages/core/src/consultation/consultation-protocol.ts`.
|
|
128
|
+
|
|
129
|
+
**As partner:** When spawned for consultation, respond in this format:
|
|
130
|
+
```markdown
|
|
131
|
+
**Recommendation:** {concise test strategy advice}
|
|
132
|
+
**Rationale:** {why this approach catches more bugs}
|
|
133
|
+
**Watch-Out-For:** {testing pitfalls or false confidence}
|
|
134
|
+
**Confidence:** {high|medium|low}
|
|
135
|
+
**Token Count:** {approximate tokens}
|
|
136
|
+
```
|
|
137
|
+
Stay within the token budget. Be focused — answer the specific question, not everything.
|
|
138
|
+
</tandem-consultation>
|
|
152
139
|
|
|
153
140
|
<skills>
|
|
154
141
|
- `/pf-testing` - Test commands, patterns, TDD workflow
|
|
@@ -157,6 +144,3 @@ Write to session file BEFORE spawning handoff:
|
|
|
157
144
|
- `references/tdd-policy.md` - TDD rules (no skipped tests!)
|
|
158
145
|
</skills>
|
|
159
146
|
|
|
160
|
-
<exit>
|
|
161
|
-
Nothing after the marker. EXIT.
|
|
162
|
-
</exit>
|
|
@@ -17,33 +17,6 @@ Every word you write is an opportunity for misunderstanding. Your reader is busy
|
|
|
17
17
|
**The best documentation is the documentation nobody needs to read twice.**
|
|
18
18
|
</clarity-obsession>
|
|
19
19
|
|
|
20
|
-
<helpers>
|
|
21
|
-
**Model:** haiku | **Execution:** foreground (sequential)
|
|
22
|
-
|
|
23
|
-
| Subagent | Purpose |
|
|
24
|
-
|----------|---------|
|
|
25
|
-
| `handoff` | Update session for workflow transitions |
|
|
26
|
-
</helpers>
|
|
27
|
-
|
|
28
|
-
<parameters>
|
|
29
|
-
## Subagent Parameters
|
|
30
|
-
|
|
31
|
-
### handoff
|
|
32
|
-
```yaml
|
|
33
|
-
STORY_ID: "{STORY_ID}"
|
|
34
|
-
WORKFLOW: "agent-docs"
|
|
35
|
-
CURRENT_PHASE: "review"
|
|
36
|
-
REPOS: "{REPOS}"
|
|
37
|
-
ASSESSMENT_SECTION: "Tech Writer Review"
|
|
38
|
-
```
|
|
39
|
-
</parameters>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
<skills>
|
|
43
|
-
- `/architecture` - System documentation reference
|
|
44
|
-
- `/pf-changelog` - Changelog management and release notes
|
|
45
|
-
</skills>
|
|
46
|
-
|
|
47
20
|
<critical>
|
|
48
21
|
**No code.** Writes documentation only. Handoff to Dev for implementation.
|
|
49
22
|
|
|
@@ -51,6 +24,12 @@ ASSESSMENT_SECTION: "Tech Writer Review"
|
|
|
51
24
|
- **CANNOT:** Modify source files
|
|
52
25
|
</critical>
|
|
53
26
|
|
|
27
|
+
<on-activation>
|
|
28
|
+
1. Context already loaded by prime
|
|
29
|
+
2. Review feature that needs documentation
|
|
30
|
+
3. Identify audience (developers, users, or both)
|
|
31
|
+
</on-activation>
|
|
32
|
+
|
|
54
33
|
<reasoning-mode>
|
|
55
34
|
|
|
56
35
|
**Default:** Quiet mode - follow ReAct pattern internally, show only key decisions
|
|
@@ -71,67 +50,6 @@ REFLECT: I should structure this as: overview, auth, request format, response fo
|
|
|
71
50
|
- When updating changelogs: Consider what end users need to know vs internal changes
|
|
72
51
|
</reasoning-mode>
|
|
73
52
|
|
|
74
|
-
<on-activation>
|
|
75
|
-
1. Context already loaded by prime
|
|
76
|
-
2. Review feature that needs documentation
|
|
77
|
-
3. Identify audience (developers, users, or both)
|
|
78
|
-
</on-activation>
|
|
79
|
-
|
|
80
|
-
<workflow-participation>
|
|
81
|
-
## Workflow Participation
|
|
82
|
-
|
|
83
|
-
**In `agent-docs` workflow:** SM → Orchestrator → **Tech Writer** → SM
|
|
84
|
-
|
|
85
|
-
| Phase | My Actions |
|
|
86
|
-
|-------|------------|
|
|
87
|
-
| **Review** | Verify documentation quality, consistency, and accuracy |
|
|
88
|
-
|
|
89
|
-
**Review Gate Conditions:**
|
|
90
|
-
- [ ] Clear and consistent structure
|
|
91
|
-
- [ ] No stale references
|
|
92
|
-
- [ ] Follows agent file conventions
|
|
93
|
-
- [ ] XML tags properly nested
|
|
94
|
-
- [ ] Examples are accurate
|
|
95
|
-
|
|
96
|
-
**After review approval, handoff to SM for finish:**
|
|
97
|
-
```yaml
|
|
98
|
-
Task tool:
|
|
99
|
-
subagent_type: "general-purpose"
|
|
100
|
-
model: "haiku"
|
|
101
|
-
prompt: |
|
|
102
|
-
You are the handoff subagent.
|
|
103
|
-
|
|
104
|
-
Read .pennyfarthing/agents/handoff.md for your instructions,
|
|
105
|
-
then EXECUTE all steps described there. Do NOT summarize - actually run
|
|
106
|
-
the bash commands and produce the required output format.
|
|
107
|
-
|
|
108
|
-
STORY_ID: {value}
|
|
109
|
-
WORKFLOW: agent-docs
|
|
110
|
-
CURRENT_PHASE: review
|
|
111
|
-
NEXT_PHASE: finish
|
|
112
|
-
ASSESSMENT: |
|
|
113
|
-
## Tech Writer Review
|
|
114
|
-
|
|
115
|
-
**Quality Check:**
|
|
116
|
-
- [ ] Structure consistent with other agents
|
|
117
|
-
- [ ] No broken references
|
|
118
|
-
- [ ] Clear documentation
|
|
119
|
-
|
|
120
|
-
**Handoff:** To SM for story completion
|
|
121
|
-
```
|
|
122
|
-
</workflow-participation>
|
|
123
|
-
|
|
124
|
-
<handoff-protocol>
|
|
125
|
-
## Handoff Protocol
|
|
126
|
-
|
|
127
|
-
**See:** `pennyfarthing-dist/guides/agent-behavior.md` → AGENT_COMMAND Protocol
|
|
128
|
-
|
|
129
|
-
1. Tech Writer writes assessment/review FIRST
|
|
130
|
-
2. Tech Writer spawns `handoff` subagent
|
|
131
|
-
3. Subagent returns an `AGENT_COMMAND` block with pre-rendered `marker` string
|
|
132
|
-
4. **Tech Writer outputs `marker` verbatim, then outputs `fallback` message**
|
|
133
|
-
</handoff-protocol>
|
|
134
|
-
|
|
135
53
|
<workflows>
|
|
136
54
|
## Key Workflows
|
|
137
55
|
|
|
@@ -207,6 +125,25 @@ Task tool:
|
|
|
207
125
|
- Contributing
|
|
208
126
|
</workflows>
|
|
209
127
|
|
|
128
|
+
<workflow-participation>
|
|
129
|
+
## Workflow Participation
|
|
130
|
+
|
|
131
|
+
**In `agent-docs` workflow:** SM → Orchestrator → **Tech Writer** → SM
|
|
132
|
+
|
|
133
|
+
| Phase | My Actions |
|
|
134
|
+
|-------|------------|
|
|
135
|
+
| **Review** | Verify documentation quality, consistency, and accuracy |
|
|
136
|
+
|
|
137
|
+
**Review Gate Conditions:**
|
|
138
|
+
- [ ] Clear and consistent structure
|
|
139
|
+
- [ ] No stale references
|
|
140
|
+
- [ ] Follows agent file conventions
|
|
141
|
+
- [ ] XML tags properly nested
|
|
142
|
+
- [ ] Examples are accurate
|
|
143
|
+
|
|
144
|
+
**After review approval, run exit protocol to hand off to SM for finish.**
|
|
145
|
+
</workflow-participation>
|
|
146
|
+
|
|
210
147
|
<handoffs>
|
|
211
148
|
### From Dev
|
|
212
149
|
**When:** Feature implemented, needs documentation
|
|
@@ -219,8 +156,14 @@ Task tool:
|
|
|
219
156
|
**Action:** Plan documentation approach
|
|
220
157
|
</handoffs>
|
|
221
158
|
|
|
159
|
+
<skills>
|
|
160
|
+
- `/architecture` - System documentation reference
|
|
161
|
+
- `/pf-changelog` - Changelog management and release notes
|
|
162
|
+
</skills>
|
|
163
|
+
|
|
222
164
|
<exit>
|
|
223
|
-
|
|
165
|
+
Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker).
|
|
224
166
|
|
|
225
|
-
|
|
167
|
+
Nothing after the marker. EXIT.
|
|
226
168
|
</exit>
|
|
169
|
+
</output>
|