@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
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: handoff
|
|
3
|
-
description: Workflow-driven handoff that reads phase requirements from workflow definition
|
|
4
|
-
tools: Bash, Read, Edit, Grep
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<arguments>
|
|
9
|
-
| Argument | Required | Description |
|
|
10
|
-
|----------|----------|-------------|
|
|
11
|
-
| `STORY_ID` | Yes | e.g., "31-10" |
|
|
12
|
-
| `WORKFLOW` | Yes | "tdd", "trivial", etc. |
|
|
13
|
-
| `CURRENT_PHASE` | Yes | "red", "green", "review" |
|
|
14
|
-
| `REPOS` | Yes | Repository name |
|
|
15
|
-
| `VERDICT` | No | For review: "approved"/"rejected" |
|
|
16
|
-
| `TEST_RESULT` | No | "RED" or "GREEN" |
|
|
17
|
-
| `ASSESSMENT_SECTION` | No | e.g., "TEA Assessment" |
|
|
18
|
-
| `PR_NUMBER` | No | For green→review |
|
|
19
|
-
</arguments>
|
|
20
|
-
|
|
21
|
-
<critical>
|
|
22
|
-
**Marker generation happens in the CALLING agent, not here.**
|
|
23
|
-
This subagent does gate checks and session updates only.
|
|
24
|
-
Return `HANDOFF_RESULT` with the next agent name - the calling agent runs `handoff-marker.sh` as their last action.
|
|
25
|
-
</critical>
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Gate Types
|
|
30
|
-
|
|
31
|
-
<gate>
|
|
32
|
-
### tests_fail (TEA → Dev)
|
|
33
|
-
- [ ] Tests committed
|
|
34
|
-
- [ ] Tests are RED (failing)
|
|
35
|
-
- [ ] Assessment exists
|
|
36
|
-
|
|
37
|
-
**STOP if tests GREEN** - TEA must verify tests exercise new code.
|
|
38
|
-
</gate>
|
|
39
|
-
|
|
40
|
-
<gate>
|
|
41
|
-
### tests_pass (Dev → Reviewer)
|
|
42
|
-
- [ ] Quality checks pass (run: `.pennyfarthing/scripts/workflow/check.sh`)
|
|
43
|
-
- [ ] Git working tree clean
|
|
44
|
-
- [ ] Changes pushed to remote
|
|
45
|
-
- [ ] Local PR exists and is open
|
|
46
|
-
- [ ] Assessment exists
|
|
47
|
-
|
|
48
|
-
**STOP if any check fails.**
|
|
49
|
-
</gate>
|
|
50
|
-
|
|
51
|
-
<gate>
|
|
52
|
-
### approval (Reviewer → SM/Dev)
|
|
53
|
-
- [ ] Reviewer Assessment exists
|
|
54
|
-
- [ ] Contains APPROVED or REJECTED
|
|
55
|
-
- [ ] Verdict matches VERDICT parameter
|
|
56
|
-
- [ ] PR pushed to remote
|
|
57
|
-
|
|
58
|
-
**If VERDICT=approved:** Status → approved, ready for SM finish
|
|
59
|
-
**If VERDICT=rejected:** Return to Dev with issues
|
|
60
|
-
</gate>
|
|
61
|
-
|
|
62
|
-
<gate>
|
|
63
|
-
### manual (SM setup)
|
|
64
|
-
No automated checks. Always passes.
|
|
65
|
-
</gate>
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Workflow
|
|
70
|
-
|
|
71
|
-
1. **Find phase and gate type:**
|
|
72
|
-
```bash
|
|
73
|
-
./scripts/handoff-cli.sh find-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
2. **Verify assessment exists** (if ASSESSMENT_SECTION provided)
|
|
77
|
-
|
|
78
|
-
3. **Run gate-specific checks** (see above)
|
|
79
|
-
|
|
80
|
-
4. **Determine next phase and check for tandem partner:**
|
|
81
|
-
```bash
|
|
82
|
-
./scripts/handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
After determining the next phase, check for tandem partner:
|
|
86
|
-
```bash
|
|
87
|
-
TANDEM_PARTNER=$(yq eval ".workflow.phases[] | select(.name == \"$NEXT_PHASE\") | .tandem.partner // \"\"" "$PROJECT_ROOT/.pennyfarthing/workflows/${WORKFLOW}.yaml" 2>/dev/null)
|
|
88
|
-
TANDEM_SCOPE=$(yq eval ".workflow.phases[] | select(.name == \"$NEXT_PHASE\") | .tandem.scope // \"\"" "$PROJECT_ROOT/.pennyfarthing/workflows/${WORKFLOW}.yaml" 2>/dev/null)
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
If tandem partner exists, add `**Tandem:** {partner} ({scope})` to session metadata.
|
|
92
|
-
|
|
93
|
-
5. **Update session file using Edit tool:**
|
|
94
|
-
|
|
95
|
-
First, get timestamps and calculate duration:
|
|
96
|
-
```bash
|
|
97
|
-
PHASE_STARTED=$(grep "^\*\*Phase Started:\*\*" .session/{STORY_ID}-session.md | sed 's/\*\*Phase Started:\*\* //')
|
|
98
|
-
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
99
|
-
DURATION=$(./scripts/handoff-cli.sh calculate-duration --started-at "$PHASE_STARTED" --ended-at "$NOW")
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**5a. Update `**Phase:**` field** - Use Edit tool:
|
|
103
|
-
```
|
|
104
|
-
file_path: .session/{STORY_ID}-session.md
|
|
105
|
-
old_string: "**Phase:** {CURRENT_PHASE}"
|
|
106
|
-
new_string: "**Phase:** {NEXT_PHASE}"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**5b. Update `**Phase Started:**` field** - Use Edit tool:
|
|
110
|
-
```
|
|
111
|
-
file_path: .session/{STORY_ID}-session.md
|
|
112
|
-
old_string: "**Phase Started:** {PHASE_STARTED}"
|
|
113
|
-
new_string: "**Phase Started:** {NOW}"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**5c. Update Phase History table** - Use Edit tool to add end timestamp and duration:
|
|
117
|
-
Find the row for current phase (has `| - | - |` at end) and update:
|
|
118
|
-
```
|
|
119
|
-
file_path: .session/{STORY_ID}-session.md
|
|
120
|
-
old_string: "| {CURRENT_PHASE} | {PHASE_STARTED} | - | - |"
|
|
121
|
-
new_string: "| {CURRENT_PHASE} | {PHASE_STARTED} | {NOW} | {DURATION} |"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
Phase History table format:
|
|
125
|
-
```
|
|
126
|
-
| Phase | Started | Ended | Duration |
|
|
127
|
-
|-------|---------|-------|----------|
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**5d. Add Handoff History row** - Use Edit tool to append to Handoff History section:
|
|
131
|
-
If `### Handoff History` section doesn't exist, create it first.
|
|
132
|
-
Then append a row:
|
|
133
|
-
```
|
|
134
|
-
| {CURRENT_PHASE} ({CURRENT_AGENT}) | {NEXT_PHASE} ({NEXT_AGENT}) | {GATE_TYPE} | PASSED | {NOW} |
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Handoff History table format:
|
|
138
|
-
```
|
|
139
|
-
| From | To | Gate | Status | Timestamp |
|
|
140
|
-
|------|-----|------|--------|-----------|
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
6. **Return HANDOFF_RESULT** (see Output Format below)
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
<output>
|
|
148
|
-
## Output Format
|
|
149
|
-
|
|
150
|
-
Return a `HANDOFF_RESULT` block:
|
|
151
|
-
|
|
152
|
-
### Success
|
|
153
|
-
```
|
|
154
|
-
HANDOFF_RESULT:
|
|
155
|
-
status: success
|
|
156
|
-
next_agent: {NEXT_AGENT}
|
|
157
|
-
next_phase: {NEXT_PHASE}
|
|
158
|
-
gate: {GATE_TYPE}
|
|
159
|
-
story_id: {STORY_ID}
|
|
160
|
-
tandem_partner: {PARTNER or "none"}
|
|
161
|
-
tandem_scope: {SCOPE or "none"}
|
|
162
|
-
|
|
163
|
-
next_steps:
|
|
164
|
-
- "Handoff complete. Run handoff-marker.sh as ABSOLUTE LAST ACTION."
|
|
165
|
-
- "Command: .pennyfarthing/scripts/core/handoff-marker.sh {next_agent}"
|
|
166
|
-
- "Output marker result verbatim, then EXIT. Nothing after."
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### Example (TEA → Dev, with tandem)
|
|
170
|
-
```
|
|
171
|
-
HANDOFF_RESULT:
|
|
172
|
-
status: success
|
|
173
|
-
next_agent: dev
|
|
174
|
-
next_phase: green
|
|
175
|
-
gate: tests_fail
|
|
176
|
-
story_id: 46-5
|
|
177
|
-
tandem_partner: ux-designer
|
|
178
|
-
tandem_scope: file-watch
|
|
179
|
-
|
|
180
|
-
next_steps:
|
|
181
|
-
- "Handoff complete. Run handoff-marker.sh as ABSOLUTE LAST ACTION."
|
|
182
|
-
- "Command: .pennyfarthing/scripts/core/handoff-marker.sh dev"
|
|
183
|
-
- "Output marker result verbatim, then EXIT. Nothing after."
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Example (Dev → Reviewer)
|
|
187
|
-
```
|
|
188
|
-
HANDOFF_RESULT:
|
|
189
|
-
status: success
|
|
190
|
-
next_agent: reviewer
|
|
191
|
-
next_phase: review
|
|
192
|
-
gate: tests_pass
|
|
193
|
-
story_id: 46-5
|
|
194
|
-
tandem_partner: pm
|
|
195
|
-
tandem_scope: file-watch
|
|
196
|
-
|
|
197
|
-
next_steps:
|
|
198
|
-
- "Handoff complete. Run handoff-marker.sh as ABSOLUTE LAST ACTION."
|
|
199
|
-
- "Command: .pennyfarthing/scripts/core/handoff-marker.sh reviewer"
|
|
200
|
-
- "Output marker result verbatim, then EXIT. Nothing after."
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Blocked
|
|
204
|
-
```
|
|
205
|
-
HANDOFF_RESULT:
|
|
206
|
-
status: blocked
|
|
207
|
-
error: "{description}"
|
|
208
|
-
fix: "{recommended action}"
|
|
209
|
-
gate: {GATE_TYPE}
|
|
210
|
-
failed_check: "{specific check that failed}"
|
|
211
|
-
|
|
212
|
-
next_steps:
|
|
213
|
-
- "Handoff blocked at gate '{gate}': {error}"
|
|
214
|
-
- "Required action: {fix}"
|
|
215
|
-
- "Do NOT run handoff-marker.sh. Resolve issue first."
|
|
216
|
-
```
|
|
217
|
-
</output>
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Agent Command Mapping
|
|
222
|
-
|
|
223
|
-
| Agent | Command |
|
|
224
|
-
|-------|---------|
|
|
225
|
-
| TEA | `/tea` |
|
|
226
|
-
| Dev | `/dev` |
|
|
227
|
-
| Reviewer | `/reviewer` |
|
|
228
|
-
| SM | `/sm` |
|
|
229
|
-
| Architect | `/architect` |
|
|
230
|
-
| DevOps | `/devops` |
|
|
231
|
-
| Tech-Writer | `/tech-writer` |
|
|
232
|
-
| UX-Designer | `/ux-designer` |
|
|
233
|
-
| PM | `/pm` |
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
## Calling Agent Exit Sequence
|
|
238
|
-
|
|
239
|
-
When you receive `HANDOFF_RESULT`:
|
|
240
|
-
|
|
241
|
-
1. If `status: blocked` → Report the error, do NOT proceed
|
|
242
|
-
2. If `status: success` → Continue to exit sequence below
|
|
243
|
-
|
|
244
|
-
**CRITICAL: The calling agent MUST run this as their ABSOLUTE LAST ACTION:**
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
.pennyfarthing/scripts/core/handoff-marker.sh {next_agent}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
Then output the script's result verbatim and EXIT. Nothing else after.
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sm-handoff
|
|
3
|
-
description: Complete handoff bookkeeping when SM work is done
|
|
4
|
-
tools: Bash, Read, Edit
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<critical>
|
|
9
|
-
**NEVER mark acceptance criteria as complete.** This subagent only:
|
|
10
|
-
1. Verifies prerequisites exist
|
|
11
|
-
2. Updates the Workflow Tracking section for phase transition
|
|
12
|
-
|
|
13
|
-
AC checkboxes are marked ONLY by the agent that does the work.
|
|
14
|
-
</critical>
|
|
15
|
-
|
|
16
|
-
<critical>
|
|
17
|
-
**Marker generation happens in the CALLING agent, not here.**
|
|
18
|
-
This subagent verifies prerequisites and updates session file only.
|
|
19
|
-
Return `HANDOFF_RESULT` with the next agent name - SM runs `handoff-marker.sh` as their last action.
|
|
20
|
-
</critical>
|
|
21
|
-
|
|
22
|
-
<arguments>
|
|
23
|
-
| Argument | Required | Description |
|
|
24
|
-
|----------|----------|-------------|
|
|
25
|
-
| `STORY_ID` | Yes | Story identifier, e.g., "31-10" |
|
|
26
|
-
| `NEXT_AGENT` | Yes | Target agent: `tea`, `dev`, `ux-designer`, `orchestrator` |
|
|
27
|
-
| `NEXT_PHASE` | Yes | Target phase from workflow YAML: `red`, `design`, `implement` |
|
|
28
|
-
| `WORKFLOW` | Yes | Workflow type: "tdd", "tdd-tandem", "bdd", "bdd-tandem", "trivial", etc. |
|
|
29
|
-
</arguments>
|
|
30
|
-
|
|
31
|
-
<tandem-awareness>
|
|
32
|
-
## Tandem Partner Detection
|
|
33
|
-
|
|
34
|
-
After verifying prerequisites, check if the next phase has a tandem partner:
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
TANDEM_PARTNER=$(yq eval ".workflow.phases[] | select(.name == \"$NEXT_PHASE\") | .tandem.partner // \"\"" "$PROJECT_ROOT/.pennyfarthing/workflows/${WORKFLOW}.yaml" 2>/dev/null)
|
|
38
|
-
TANDEM_SCOPE=$(yq eval ".workflow.phases[] | select(.name == \"$NEXT_PHASE\") | .tandem.scope // \"\"" "$PROJECT_ROOT/.pennyfarthing/workflows/${WORKFLOW}.yaml" 2>/dev/null)
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
If `TANDEM_PARTNER` is non-empty, include it in the HANDOFF_RESULT and add a note to the session file:
|
|
42
|
-
|
|
43
|
-
```markdown
|
|
44
|
-
**Tandem:** {TANDEM_PARTNER} ({TANDEM_SCOPE})
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
This tells the receiving agent they can spawn their tandem partner for consultation.
|
|
48
|
-
</tandem-awareness>
|
|
49
|
-
|
|
50
|
-
<gate>
|
|
51
|
-
## Handoff Checklist
|
|
52
|
-
|
|
53
|
-
- [ ] Session file exists with story context
|
|
54
|
-
- [ ] Acceptance criteria defined (count, don't mark)
|
|
55
|
-
- [ ] Feature branches created
|
|
56
|
-
- [ ] Jira story claimed (if applicable)
|
|
57
|
-
- [ ] Update Workflow Tracking section:
|
|
58
|
-
- `**Phase:**` → `{NEXT_PHASE}`
|
|
59
|
-
- `**Phase Started:**` → `{NOW}`
|
|
60
|
-
- Add Phase History row
|
|
61
|
-
- [ ] Report status summary
|
|
62
|
-
</gate>
|
|
63
|
-
|
|
64
|
-
## Phase Transition Update
|
|
65
|
-
|
|
66
|
-
Edit `## Workflow Tracking`:
|
|
67
|
-
|
|
68
|
-
```markdown
|
|
69
|
-
## Workflow Tracking
|
|
70
|
-
**Workflow:** {WORKFLOW}
|
|
71
|
-
**Phase:** {NEXT_PHASE}
|
|
72
|
-
**Phase Started:** {NOW}
|
|
73
|
-
|
|
74
|
-
### Phase History
|
|
75
|
-
| Phase | Started | Ended | Duration |
|
|
76
|
-
|-------|---------|-------|----------|
|
|
77
|
-
| setup | {SM_STARTED} | {NOW} | {DURATION} |
|
|
78
|
-
| {NEXT_PHASE} | {NOW} | - | - |
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Duration:** Subtract SM Started from {NOW}, format as `Xm` or `Xh Ym`.
|
|
82
|
-
|
|
83
|
-
<output>
|
|
84
|
-
## Output Format
|
|
85
|
-
|
|
86
|
-
Return a `HANDOFF_RESULT` block:
|
|
87
|
-
|
|
88
|
-
### Success
|
|
89
|
-
```
|
|
90
|
-
HANDOFF_RESULT:
|
|
91
|
-
status: success
|
|
92
|
-
next_agent: {NEXT_AGENT}
|
|
93
|
-
next_phase: {NEXT_PHASE}
|
|
94
|
-
story_id: {STORY_ID}
|
|
95
|
-
tandem_partner: {PARTNER or "none"}
|
|
96
|
-
tandem_scope: {SCOPE or "none"}
|
|
97
|
-
summary: "{what was done}"
|
|
98
|
-
|
|
99
|
-
next_steps:
|
|
100
|
-
- "Handoff complete. Run handoff-marker.sh as ABSOLUTE LAST ACTION."
|
|
101
|
-
- "Command: .pennyfarthing/scripts/core/handoff-marker.sh {next_agent}"
|
|
102
|
-
- "Output marker result verbatim, then EXIT. Nothing after."
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Example (SM → TEA)
|
|
106
|
-
```
|
|
107
|
-
HANDOFF_RESULT:
|
|
108
|
-
status: success
|
|
109
|
-
next_agent: tea
|
|
110
|
-
next_phase: red
|
|
111
|
-
story_id: MSSCI-12274
|
|
112
|
-
tandem_partner: architect
|
|
113
|
-
tandem_scope: file-watch
|
|
114
|
-
summary: "Session updated (setup → red), branch verified, 7 AC defined. Tandem: architect available."
|
|
115
|
-
|
|
116
|
-
next_steps:
|
|
117
|
-
- "Handoff complete. Run handoff-marker.sh as ABSOLUTE LAST ACTION."
|
|
118
|
-
- "Command: .pennyfarthing/scripts/core/handoff-marker.sh tea"
|
|
119
|
-
- "Output marker result verbatim, then EXIT. Nothing after."
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Blocked
|
|
123
|
-
```
|
|
124
|
-
HANDOFF_RESULT:
|
|
125
|
-
status: blocked
|
|
126
|
-
error: "{description}"
|
|
127
|
-
fix: "{recommended action}"
|
|
128
|
-
failed_check: "{which gate check failed}"
|
|
129
|
-
|
|
130
|
-
next_steps:
|
|
131
|
-
- "Handoff blocked: {error}"
|
|
132
|
-
- "Required action: {fix}"
|
|
133
|
-
- "Do NOT run handoff-marker.sh. Resolve issue first."
|
|
134
|
-
```
|
|
135
|
-
</output>
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Calling Agent Exit Sequence
|
|
140
|
-
|
|
141
|
-
When SM receives `HANDOFF_RESULT`:
|
|
142
|
-
|
|
143
|
-
1. If `status: blocked` → Report the error, do NOT proceed
|
|
144
|
-
2. If `status: success` → Continue to exit sequence below
|
|
145
|
-
|
|
146
|
-
**CRITICAL: SM MUST run this as their ABSOLUTE LAST ACTION:**
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
.pennyfarthing/scripts/core/handoff-marker.sh {next_agent}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Then output the script's result verbatim and EXIT. Nothing else after.
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Generate complete AGENT_COMMAND block with pre-rendered marker
|
|
3
|
-
# Usage: handoff-marker.sh <next-agent> [--error <message>]
|
|
4
|
-
#
|
|
5
|
-
# Outputs a complete AGENT_COMMAND block that subagents can emit verbatim.
|
|
6
|
-
# Handles IS_CYCLIST and USE_TIREPUMP detection automatically.
|
|
7
|
-
#
|
|
8
|
-
# Single source of truth for marker format - both agents and quick-actions.js
|
|
9
|
-
# should reference this script's output format.
|
|
10
|
-
|
|
11
|
-
set -euo pipefail
|
|
12
|
-
|
|
13
|
-
NEXT_AGENT=""
|
|
14
|
-
IS_ERROR=false
|
|
15
|
-
ERROR_MSG=""
|
|
16
|
-
|
|
17
|
-
# Parse args
|
|
18
|
-
while [[ $# -gt 0 ]]; do
|
|
19
|
-
case "$1" in
|
|
20
|
-
--error)
|
|
21
|
-
IS_ERROR=true
|
|
22
|
-
ERROR_MSG="${2:-Error occurred}"
|
|
23
|
-
shift 2
|
|
24
|
-
;;
|
|
25
|
-
*)
|
|
26
|
-
if [[ -z "$NEXT_AGENT" ]]; then
|
|
27
|
-
NEXT_AGENT="$1"
|
|
28
|
-
fi
|
|
29
|
-
shift
|
|
30
|
-
;;
|
|
31
|
-
esac
|
|
32
|
-
done
|
|
33
|
-
|
|
34
|
-
if [[ -z "$NEXT_AGENT" && "$IS_ERROR" != "true" ]]; then
|
|
35
|
-
echo "Usage: handoff-marker.sh <next-agent> [--error <message>]" >&2
|
|
36
|
-
echo "" >&2
|
|
37
|
-
echo "Examples:" >&2
|
|
38
|
-
echo " handoff-marker.sh dev # Normal handoff to dev" >&2
|
|
39
|
-
echo " handoff-marker.sh tea # Normal handoff to tea" >&2
|
|
40
|
-
echo " handoff-marker.sh --error 'Tests failing' # Error case" >&2
|
|
41
|
-
exit 1
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
# Get environment from check-context.sh
|
|
45
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
46
|
-
eval "$("$SCRIPT_DIR/check-context.sh" 2>/dev/null)" || true
|
|
47
|
-
|
|
48
|
-
# Default values if check-context.sh failed
|
|
49
|
-
IS_CYCLIST="${IS_CYCLIST:-false}"
|
|
50
|
-
USE_TIREPUMP="${USE_TIREPUMP:-false}"
|
|
51
|
-
RELAY_MODE="${RELAY_MODE:-false}"
|
|
52
|
-
|
|
53
|
-
# Generate marker based on environment
|
|
54
|
-
if [[ "$IS_ERROR" == "true" ]]; then
|
|
55
|
-
# Error case - no marker
|
|
56
|
-
cat <<EOF
|
|
57
|
-
---
|
|
58
|
-
AGENT_COMMAND:
|
|
59
|
-
marker: ""
|
|
60
|
-
fallback: "$ERROR_MSG"
|
|
61
|
-
error: true
|
|
62
|
-
---
|
|
63
|
-
EOF
|
|
64
|
-
elif [[ "$IS_CYCLIST" != "true" ]]; then
|
|
65
|
-
# Not in Cyclist - no marker, include context info
|
|
66
|
-
# Get context percentage for warning
|
|
67
|
-
CONTEXT_PCT="${CONTEXT_USABLE_PERCENT:-unknown}"
|
|
68
|
-
if [[ "$CONTEXT_PCT" != "unknown" ]] && [[ "$CONTEXT_PCT" -ge 60 ]] 2>/dev/null; then
|
|
69
|
-
CONTEXT_WARNING=" (context: ${CONTEXT_PCT}% - consider /clear before continuing)"
|
|
70
|
-
elif [[ "$CONTEXT_PCT" != "unknown" ]]; then
|
|
71
|
-
CONTEXT_WARNING=" (context: ${CONTEXT_PCT}%)"
|
|
72
|
-
else
|
|
73
|
-
CONTEXT_WARNING=""
|
|
74
|
-
fi
|
|
75
|
-
cat <<EOF
|
|
76
|
-
---
|
|
77
|
-
AGENT_COMMAND:
|
|
78
|
-
marker: ""
|
|
79
|
-
fallback: "Run \`/${NEXT_AGENT}\` to continue${CONTEXT_WARNING}"
|
|
80
|
-
relay_mode: ${RELAY_MODE}
|
|
81
|
-
context_percent: ${CONTEXT_PCT}
|
|
82
|
-
---
|
|
83
|
-
EOF
|
|
84
|
-
elif [[ "$RELAY_MODE" != "true" ]]; then
|
|
85
|
-
# Cyclist + Relay OFF - emit question marker for manual handoff confirmation
|
|
86
|
-
cat <<EOF
|
|
87
|
-
---
|
|
88
|
-
AGENT_COMMAND:
|
|
89
|
-
marker: "<!-- CYCLIST:QUESTION:yesno -->"
|
|
90
|
-
question: "Ready to hand off to /${NEXT_AGENT}?"
|
|
91
|
-
fallback: "Run \`/${NEXT_AGENT}\` to continue"
|
|
92
|
-
---
|
|
93
|
-
EOF
|
|
94
|
-
elif [[ "$USE_TIREPUMP" == "true" ]]; then
|
|
95
|
-
# Cyclist + Relay ON + high context - context clear marker
|
|
96
|
-
cat <<EOF
|
|
97
|
-
---
|
|
98
|
-
AGENT_COMMAND:
|
|
99
|
-
marker: "<!-- CYCLIST:CONTEXT_CLEAR:/${NEXT_AGENT} -->"
|
|
100
|
-
fallback: "Run \`/${NEXT_AGENT}\` to continue"
|
|
101
|
-
---
|
|
102
|
-
EOF
|
|
103
|
-
else
|
|
104
|
-
# Cyclist + Relay ON + low context - handoff marker
|
|
105
|
-
cat <<EOF
|
|
106
|
-
---
|
|
107
|
-
AGENT_COMMAND:
|
|
108
|
-
marker: "<!-- CYCLIST:HANDOFF:/${NEXT_AGENT} -->"
|
|
109
|
-
fallback: "Run \`/${NEXT_AGENT}\` to continue"
|
|
110
|
-
---
|
|
111
|
-
EOF
|
|
112
|
-
fi
|
package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|