@pennyfarthing/core 10.0.5 → 10.2.0
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 +19 -22
- package/package.json +17 -11
- package/packages/core/dist/cli/commands/doctor-file-layout.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor-legacy.test.js +24 -0
- package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +346 -13
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/e2e-fresh-install.test.js +1 -1
- package/packages/core/dist/cli/commands/e2e-fresh-install.test.js.map +1 -1
- package/packages/core/dist/cli/commands/e2e-upgrade.test.js +1 -1
- package/packages/core/dist/cli/commands/e2e-upgrade.test.js.map +1 -1
- package/packages/core/dist/cli/commands/hooks-consolidation.test.js +2 -2
- package/packages/core/dist/cli/commands/hooks-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/init-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/init.d.ts +7 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/init.js +41 -8
- package/packages/core/dist/cli/commands/init.js.map +1 -1
- package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/uninstall.js +24 -13
- package/packages/core/dist/cli/commands/uninstall.js.map +1 -1
- package/packages/core/dist/cli/commands/update-consolidation.test.js +0 -10
- package/packages/core/dist/cli/commands/update-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +26 -0
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/index.js +1 -1
- package/packages/core/dist/cli/index.js.map +1 -1
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
- package/packages/core/dist/cli/theme-maker.test.js +64 -115
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -1
- package/packages/core/dist/cli/utils/python.d.ts +22 -0
- package/packages/core/dist/cli/utils/python.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/python.js +102 -0
- package/packages/core/dist/cli/utils/python.js.map +1 -0
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/settings.js +10 -0
- package/packages/core/dist/cli/utils/settings.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +2 -2
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/plugins/plugin-discovery.d.ts +116 -0
- package/packages/core/dist/plugins/plugin-discovery.d.ts.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.js +165 -0
- package/packages/core/dist/plugins/plugin-discovery.js.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.test.d.ts +22 -0
- package/packages/core/dist/plugins/plugin-discovery.test.d.ts.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.test.js +498 -0
- package/packages/core/dist/plugins/plugin-discovery.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -1
- package/packages/core/dist/workflow/context-watch.d.ts +80 -0
- package/packages/core/dist/workflow/context-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/context-watch.js +235 -0
- package/packages/core/dist/workflow/context-watch.js.map +1 -0
- package/packages/core/dist/workflow/context-watch.test.d.ts +1 -0
- package/packages/core/dist/workflow/context-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/context-watch.test.js +746 -0
- package/packages/core/dist/workflow/context-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/file-watch.d.ts +82 -0
- package/packages/core/dist/workflow/file-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/file-watch.js +198 -0
- package/packages/core/dist/workflow/file-watch.js.map +1 -0
- package/packages/core/dist/workflow/file-watch.test.d.ts +21 -0
- package/packages/core/dist/workflow/file-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/file-watch.test.js +469 -0
- package/packages/core/dist/workflow/file-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/observation-writer.d.ts +79 -0
- package/packages/core/dist/workflow/observation-writer.d.ts.map +1 -0
- package/packages/core/dist/workflow/observation-writer.js +97 -0
- package/packages/core/dist/workflow/observation-writer.js.map +1 -0
- package/packages/core/dist/workflow/observation-writer.test.d.ts +18 -0
- package/packages/core/dist/workflow/observation-writer.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/observation-writer.test.js +424 -0
- package/packages/core/dist/workflow/observation-writer.test.js.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js +4 -2
- package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -1
- package/packages/core/dist/workflow/tandem-lifecycle.d.ts +117 -0
- package/packages/core/dist/workflow/tandem-lifecycle.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.js +186 -0
- package/packages/core/dist/workflow/tandem-lifecycle.js.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.d.ts +16 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.js +531 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.js.map +1 -0
- package/packages/core/dist/workflow/tool-watch.d.ts +68 -0
- package/packages/core/dist/workflow/tool-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/tool-watch.js +166 -0
- package/packages/core/dist/workflow/tool-watch.js.map +1 -0
- package/packages/core/dist/workflow/tool-watch.test.d.ts +18 -0
- package/packages/core/dist/workflow/tool-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tool-watch.test.js +718 -0
- package/packages/core/dist/workflow/tool-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.js +8 -4
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts +7 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +44 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.js +192 -0
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
- package/pennyfarthing-dist/agents/README.md +1 -3
- package/pennyfarthing-dist/agents/architect.md +0 -6
- package/pennyfarthing-dist/agents/devops.md +0 -6
- package/pennyfarthing-dist/agents/handoff.md +18 -3
- package/pennyfarthing-dist/agents/orchestrator.md +0 -6
- package/pennyfarthing-dist/agents/pm.md +0 -6
- package/pennyfarthing-dist/agents/sm-finish.md +1 -1
- package/pennyfarthing-dist/agents/sm-handoff.md +27 -4
- package/pennyfarthing-dist/agents/sm.md +11 -11
- package/pennyfarthing-dist/agents/tandem-backseat.md +119 -0
- package/pennyfarthing-dist/commands/architect.md +11 -3
- package/pennyfarthing-dist/commands/close-epic.md +24 -131
- package/pennyfarthing-dist/commands/create-theme.md +14 -24
- package/pennyfarthing-dist/commands/dev.md +11 -3
- package/pennyfarthing-dist/commands/devops.md +11 -3
- package/pennyfarthing-dist/commands/health-check.md +1 -3
- package/pennyfarthing-dist/commands/help.md +8 -12
- package/pennyfarthing-dist/commands/list-themes.md +14 -16
- package/pennyfarthing-dist/commands/orchestrator.md +11 -3
- package/pennyfarthing-dist/commands/parallel-work.md +1 -3
- package/pennyfarthing-dist/commands/pm.md +11 -3
- package/pennyfarthing-dist/commands/prime.md +6 -6
- package/pennyfarthing-dist/commands/reviewer.md +11 -3
- package/pennyfarthing-dist/commands/run-ci.md +1 -1
- package/pennyfarthing-dist/commands/set-theme.md +14 -51
- package/pennyfarthing-dist/commands/setup.md +5 -1
- package/pennyfarthing-dist/commands/show-theme.md +14 -16
- package/pennyfarthing-dist/commands/sm.md +11 -3
- package/pennyfarthing-dist/commands/tea.md +11 -3
- package/pennyfarthing-dist/commands/tech-writer.md +11 -3
- package/pennyfarthing-dist/commands/theme-maker.md +14 -671
- package/pennyfarthing-dist/commands/theme.md +95 -0
- package/pennyfarthing-dist/commands/ux-designer.md +11 -3
- package/pennyfarthing-dist/commands/work.md +3 -5
- package/pennyfarthing-dist/guides/agent-behavior.md +62 -6
- package/pennyfarthing-dist/guides/agent-coordination.md +11 -13
- package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
- package/pennyfarthing-dist/guides/bikelane.md +3 -2
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +212 -0
- package/pennyfarthing-dist/guides/hooks.md +5 -5
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +3 -3
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +9 -59
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -5
- package/pennyfarthing-dist/guides/prime.md +2 -2
- package/pennyfarthing-dist/guides/scale-levels.md +4 -6
- package/pennyfarthing-dist/guides/skill-schema.md +4 -4
- package/pennyfarthing-dist/guides/tandem-protocol.md +158 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/fifth-element.yaml +295 -0
- package/pennyfarthing-dist/scripts/README.md +1 -1
- package/pennyfarthing-dist/scripts/core/agent-session.sh +6 -2
- package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
- package/pennyfarthing-dist/scripts/git/release.sh +0 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +131 -54
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +32 -15
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
- package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
- package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/statusline.sh +50 -8
- package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +0 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
- package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/theme/README.md +1 -1
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +10 -144
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
- package/pennyfarthing-dist/skills/skill-registry.schema.json +8 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +21 -17
- package/pennyfarthing-dist/skills/sprint/skill.md +25 -2
- package/pennyfarthing-dist/skills/story/scripts/create-story.sh +0 -0
- package/pennyfarthing-dist/skills/story/scripts/size-story.sh +0 -0
- package/pennyfarthing-dist/skills/story/scripts/story-template.sh +0 -0
- package/pennyfarthing-dist/skills/theme/skill.md +290 -75
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
- package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/skill.md +27 -4
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -11
- package/pennyfarthing-dist/templates/auto-load-sm.sh.template +14 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
- package/pennyfarthing-dist/workflows/2party-tdd.yaml +399 -0
- package/pennyfarthing-dist/workflows/architecture/workflow.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +70 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +41 -24
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +61 -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__/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__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bellmode_hook.py +202 -47
- package/pennyfarthing_scripts/brownfield/__init__.py +6 -6
- package/pennyfarthing_scripts/brownfield/__main__.py +1 -0
- 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/brownfield/cli.py +0 -1
- package/pennyfarthing_scripts/brownfield/discover.py +1 -2
- package/pennyfarthing_scripts/cli.py +23 -3
- package/pennyfarthing_scripts/codemarkers/__init__.py +23 -0
- package/pennyfarthing_scripts/codemarkers/__main__.py +6 -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/codemarkers/analyze.py +501 -0
- package/pennyfarthing_scripts/codemarkers/cli.py +179 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +88 -0
- package/pennyfarthing_scripts/codemarkers/models.py +60 -0
- package/pennyfarthing_scripts/common/__init__.py +8 -9
- package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/config.py +1 -1
- package/pennyfarthing_scripts/complexity/__init__.py +15 -0
- package/pennyfarthing_scripts/complexity/__main__.py +6 -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/complexity/analyze.py +207 -0
- package/pennyfarthing_scripts/complexity/cli.py +82 -0
- package/pennyfarthing_scripts/complexity/formatters.py +64 -0
- package/pennyfarthing_scripts/complexity/models.py +32 -0
- package/pennyfarthing_scripts/context.py +14 -15
- package/pennyfarthing_scripts/deadcode/__init__.py +6 -0
- package/pennyfarthing_scripts/deadcode/__main__.py +6 -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/deadcode/analyze.py +322 -0
- package/pennyfarthing_scripts/deadcode/cli.py +163 -0
- package/pennyfarthing_scripts/deadcode/formatters.py +106 -0
- package/pennyfarthing_scripts/deadcode/models.py +54 -0
- package/pennyfarthing_scripts/dependencies/__init__.py +20 -0
- package/pennyfarthing_scripts/dependencies/__main__.py +5 -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/dependencies/analyze.py +155 -0
- package/pennyfarthing_scripts/dependencies/cli.py +76 -0
- package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
- package/pennyfarthing_scripts/dependencies/models.py +39 -0
- package/pennyfarthing_scripts/git/__init__.py +5 -5
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/create_branches.py +3 -2
- package/pennyfarthing_scripts/git/status_all.py +1 -1
- package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
- package/pennyfarthing_scripts/healthscore/__main__.py +14 -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/healthscore/analyze.py +591 -0
- package/pennyfarthing_scripts/healthscore/cli.py +80 -0
- package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
- package/pennyfarthing_scripts/healthscore/models.py +43 -0
- package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing_scripts/hooks.py +8 -11
- package/pennyfarthing_scripts/hotspots/__init__.py +6 -6
- 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/hotspots/analyze.py +155 -14
- package/pennyfarthing_scripts/hotspots/cli.py +12 -10
- package/pennyfarthing_scripts/hotspots/models.py +0 -1
- package/pennyfarthing_scripts/jira/__init__.py +15 -17
- 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/jira/bidirectional.py +44 -18
- package/pennyfarthing_scripts/jira/claim.py +21 -0
- package/pennyfarthing_scripts/jira/cli.py +6 -3
- package/pennyfarthing_scripts/jira/client.py +32 -4
- package/pennyfarthing_scripts/jira/create.py +45 -1
- package/pennyfarthing_scripts/jira/epic.py +3 -2
- package/pennyfarthing_scripts/jira/reconcile.py +0 -1
- package/pennyfarthing_scripts/jira/story.py +2 -0
- package/pennyfarthing_scripts/jira/sync.py +1 -1
- 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/migration/skill.py +0 -1
- package/pennyfarthing_scripts/migration/step.py +0 -1
- package/pennyfarthing_scripts/migration/validate.py +8 -5
- package/pennyfarthing_scripts/patch_mode.py +2 -2
- package/pennyfarthing_scripts/preflight/__init__.py +1 -1
- 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/preflight/finish.py +0 -1
- package/pennyfarthing_scripts/pretooluse_hook.py +6 -7
- 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__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/cli.py +5 -1
- package/pennyfarthing_scripts/prime/loader.py +2 -3
- package/pennyfarthing_scripts/prime/persona.py +2 -1
- package/pennyfarthing_scripts/prime/tiers.py +4 -4
- package/pennyfarthing_scripts/schema_validation_hook.py +2 -3
- package/pennyfarthing_scripts/sprint/__init__.py +10 -12
- package/pennyfarthing_scripts/sprint/__main__.py +2 -2
- 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__/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/archive.py +0 -1
- package/pennyfarthing_scripts/sprint/archive_epic.py +198 -97
- package/pennyfarthing_scripts/sprint/cli.py +62 -46
- package/pennyfarthing_scripts/sprint/epic_add.py +8 -1
- package/pennyfarthing_scripts/sprint/import_epic.py +42 -18
- package/pennyfarthing_scripts/sprint/loader.py +6 -0
- package/pennyfarthing_scripts/sprint/status.py +1 -2
- package/pennyfarthing_scripts/sprint/story_add.py +202 -27
- package/pennyfarthing_scripts/sprint/story_finish.py +209 -0
- package/pennyfarthing_scripts/sprint/story_update.py +11 -3
- package/pennyfarthing_scripts/sprint/validate_cmd.py +0 -1
- package/pennyfarthing_scripts/sprint/validator.py +120 -6
- package/pennyfarthing_scripts/sprint/work.py +28 -7
- package/pennyfarthing_scripts/sprint/yaml_io.py +10 -2
- package/pennyfarthing_scripts/story/__init__.py +14 -16
- 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/story/size.py +0 -1
- package/pennyfarthing_scripts/story/template.py +0 -1
- package/pennyfarthing_scripts/swebench.py +1 -2
- 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_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_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_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_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_validate_cmd.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/conftest.py +1 -2
- package/pennyfarthing_scripts/tests/test_brownfield.py +10 -13
- package/pennyfarthing_scripts/tests/test_cli_modules.py +0 -4
- package/pennyfarthing_scripts/tests/test_codemarkers.py +687 -0
- package/pennyfarthing_scripts/tests/test_common.py +9 -4
- package/pennyfarthing_scripts/tests/test_epic_shard_validation.py +699 -0
- package/pennyfarthing_scripts/tests/test_git_utils.py +10 -13
- package/pennyfarthing_scripts/tests/test_healthscore.py +516 -0
- package/pennyfarthing_scripts/tests/test_jira_package.py +0 -3
- package/pennyfarthing_scripts/tests/test_package_structure.py +3 -16
- package/pennyfarthing_scripts/tests/test_patch_mode.py +7 -11
- package/pennyfarthing_scripts/tests/test_prime.py +39 -21
- package/pennyfarthing_scripts/tests/test_sprint_package.py +3 -8
- package/pennyfarthing_scripts/tests/test_sprint_validator.py +53 -5
- package/pennyfarthing_scripts/tests/test_story_add.py +3 -7
- package/pennyfarthing_scripts/tests/test_story_package.py +0 -3
- package/pennyfarthing_scripts/tests/test_story_update.py +5 -10
- package/pennyfarthing_scripts/tests/test_tiers.py +18 -17
- package/pennyfarthing_scripts/tests/test_token_counting.py +19 -13
- package/pennyfarthing_scripts/tests/test_validate_cmd.py +2 -7
- package/pennyfarthing_scripts/tests/test_workflow_check.py +0 -2
- package/pennyfarthing_scripts/tests/test_yaml_io.py +0 -3
- package/pennyfarthing_scripts/theme/__init__.py +5 -0
- package/pennyfarthing_scripts/theme/__main__.py +6 -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/theme/cli.py +287 -0
- package/pennyfarthing_scripts/validate/__init__.py +21 -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/__init__.py +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/agent.py +239 -0
- package/pennyfarthing_scripts/validate/adapters/schema.py +30 -0
- package/pennyfarthing_scripts/validate/adapters/skill_command.py +292 -0
- package/pennyfarthing_scripts/validate/adapters/sprint.py +69 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +320 -0
- package/pennyfarthing_scripts/validate/cli.py +141 -0
- package/pennyfarthing_scripts/welcome_hook.py +2 -3
- package/pennyfarthing_scripts/workflow.py +3 -3
- package/scripts/README.md +41 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
- package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
- package/pennyfarthing-dist/commands/benchmark.md +0 -485
- package/pennyfarthing-dist/commands/job-fair.md +0 -102
- package/pennyfarthing-dist/commands/solo.md +0 -447
- package/pennyfarthing-dist/guides/benchmarks.md +0 -62
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +0 -59
- package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +0 -220
- package/pennyfarthing-dist/scripts/test/swebench-judge.py +0 -374
- package/pennyfarthing-dist/scripts/test/test-cache.sh +0 -165
- package/pennyfarthing-dist/scripts/test/test-setup.sh +0 -337
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +0 -13
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +0 -402
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +0 -97
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -261
- package/pennyfarthing-dist/skills/judge/SKILL.md +0 -644
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -187
- package/pennyfarthing-dist/workflows/dev-story/checklist.md +0 -80
- package/pennyfarthing-dist/workflows/dev-story/instructions.xml +0 -410
- package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +0 -50
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +0 -201
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +0 -156
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +0 -140
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +0 -203
- package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +0 -74
- package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +0 -27
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/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
|
@@ -163,6 +163,18 @@ SM → TEA → Dev → Reviewer → SM
|
|
|
163
163
|
- Dev implements to make tests pass
|
|
164
164
|
- **Triggers:** `types: [feature, enhancement]`, `points.min: 3`
|
|
165
165
|
|
|
166
|
+
### TDD-Tandem (TDD with full tandem chain)
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
setup → red (+Architect) → green (+TEA) → review (+PM) → finish
|
|
170
|
+
SM → TEA (+Architect) → Dev (+TEA) → Reviewer (+PM) → SM
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- Full tandem chain: every phase has a backseat observer
|
|
174
|
+
- Architect watches test design, TEA watches implementation, PM watches review
|
|
175
|
+
- For high-stakes features needing cross-role visibility
|
|
176
|
+
- **Triggers:** `tags: [tandem]`, `points.min: 3`
|
|
177
|
+
|
|
166
178
|
### Trivial (for 1-2 point fixes)
|
|
167
179
|
|
|
168
180
|
```
|
|
@@ -196,6 +208,17 @@ SM → UX-Designer → TEA → Dev → Reviewer → SM
|
|
|
196
208
|
- For UI components and user-facing features
|
|
197
209
|
- **Triggers:** `types: [ui, ux, behavior]`, `tags: [bdd, ux-first]`
|
|
198
210
|
|
|
211
|
+
### BDD-Tandem (BDD with full tandem chain)
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
setup → design (+Architect) → red → green (+UX-Designer) → review (+PM) → finish
|
|
215
|
+
SM → UX-Designer (+Architect) → TEA → Dev (+UX-Designer) → Reviewer (+PM) → SM
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
- Full tandem chain: Architect watches design, UX-Designer watches implementation, PM watches review
|
|
219
|
+
- Everyone shares their cake — cross-role visibility at every phase
|
|
220
|
+
- **Triggers:** `tags: [bdd-tandem, tandem, ux-first]`, `points.min: 3`
|
|
221
|
+
|
|
199
222
|
### Architecture (stepped workflow)
|
|
200
223
|
|
|
201
224
|
```
|
|
@@ -257,7 +280,7 @@ Fix session file when handoffs didn't update phase tracking properly. This corre
|
|
|
257
280
|
|
|
258
281
|
**When to use:**
|
|
259
282
|
- SM detects wrong phase after handoff
|
|
260
|
-
-
|
|
283
|
+
- Prime activation output shows stale state
|
|
261
284
|
- Phase History table is incomplete
|
|
262
285
|
|
|
263
286
|
**Run:**
|
|
@@ -340,6 +363,6 @@ workflow:
|
|
|
340
363
|
|
|
341
364
|
For comprehensive documentation on creating stepped workflows, see:
|
|
342
365
|
|
|
343
|
-
- **[
|
|
344
|
-
- **
|
|
345
|
-
- **[pennyfarthing-dist/workflows/architecture.yaml](
|
|
366
|
+
- **[guides/bikelane.md](../../guides/bikelane.md)** - Full BikeLane user guide
|
|
367
|
+
- **ADR-0013: Stepped Workflow Support** - Technical ADR (see `docs/adr/0013-bmad-workflow-import.md` in framework repo)
|
|
368
|
+
- **[pennyfarthing-dist/workflows/architecture.yaml](../../workflows/architecture.yaml)** - Example implementation
|
|
@@ -67,7 +67,6 @@ strategic_agents:
|
|
|
67
67
|
- Skill(tea)
|
|
68
68
|
- Skill(dev)
|
|
69
69
|
- Skill(reviewer)
|
|
70
|
-
- Task(workflow-status-check)
|
|
71
70
|
- Task(sm-*)
|
|
72
71
|
context_files:
|
|
73
72
|
- sprint/current-sprint.yaml
|
|
@@ -209,16 +208,6 @@ helper_subagents:
|
|
|
209
208
|
- Bash # Run test commands only
|
|
210
209
|
- Grep # Search test output
|
|
211
210
|
|
|
212
|
-
workflow-status-check:
|
|
213
|
-
description: "Scans session files and git status"
|
|
214
|
-
scope: task
|
|
215
|
-
model: haiku
|
|
216
|
-
permissions:
|
|
217
|
-
- Read
|
|
218
|
-
- Glob
|
|
219
|
-
- Grep
|
|
220
|
-
- Bash # Git commands only
|
|
221
|
-
|
|
222
211
|
sm-story-setup:
|
|
223
212
|
description: "Creates branches and session files"
|
|
224
213
|
scope: task
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Auto-load /sm agent on new session start
|
|
3
|
+
# Injects additionalContext telling Claude to invoke the SM agent
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
cat <<'EOF'
|
|
8
|
+
{
|
|
9
|
+
"hookSpecificOutput": {
|
|
10
|
+
"hookEventName": "SessionStart",
|
|
11
|
+
"additionalContext": "IMPORTANT: Auto-invoke the /sm agent immediately. Run the Skill tool with skill: \"sm\" as your first action. Do not greet the user or do anything else first."
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
EOF
|
|
@@ -51,6 +51,15 @@
|
|
|
51
51
|
"command": "\"$CLAUDE_PROJECT_DIR\"/.pennyfarthing/project/hooks/setup-env.sh"
|
|
52
52
|
}
|
|
53
53
|
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"matcher": "startup",
|
|
57
|
+
"hooks": [
|
|
58
|
+
{
|
|
59
|
+
"type": "command",
|
|
60
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.pennyfarthing/project/hooks/auto-load-sm.sh"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
54
63
|
}
|
|
55
64
|
],
|
|
56
65
|
"Stop": [
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# 2-Party TDD Workflow - Story Refinement + Test-Driven Development
|
|
2
|
+
#
|
|
3
|
+
# Adds a story refinement gate before standard TDD. SM runs two focused
|
|
4
|
+
# brainstorm parties to surface gaps before TEA and Dev receive the story.
|
|
5
|
+
#
|
|
6
|
+
# Flow: SM → SM(party:dev) → SM(party:tea) → SM(quality) → TEA → Dev → QA → Reviewer → SM
|
|
7
|
+
#
|
|
8
|
+
# Review rejection loop:
|
|
9
|
+
# If Reviewer finds issues and tests passed → tests are incomplete.
|
|
10
|
+
# Reviewer writes findings to story → TEA writes failing tests → Dev fixes → QA verifies → Reviewer again.
|
|
11
|
+
# If Reviewer finds only lint/format issues → Dev fixes → QA verifies → Reviewer again.
|
|
12
|
+
# QA verification ensures Reviewer only sees verified-clean code.
|
|
13
|
+
#
|
|
14
|
+
# PR policy:
|
|
15
|
+
# Dev pushes the branch but does NOT create a PR.
|
|
16
|
+
# SM prepares PR content, user approves before submission.
|
|
17
|
+
# Default pr_mode: draft. User can set to "ready" in pennyfarthing config.
|
|
18
|
+
#
|
|
19
|
+
# Post-PR lifecycle:
|
|
20
|
+
# External reviews (AI bots, humans) are triaged via party-mode evaluation.
|
|
21
|
+
# Default stance: we do NOT adopt suggestions unless the team agrees.
|
|
22
|
+
# All reply comments are drafted locally and approved by user before posting.
|
|
23
|
+
# Communication with maintainers is irreversible — protect relationships.
|
|
24
|
+
# PR is monitored through merge/close, story status updated throughout.
|
|
25
|
+
#
|
|
26
|
+
# The "2 party" name refers to the two stakeholder perspectives consulted:
|
|
27
|
+
# Party 1: What does Dev need to succeed?
|
|
28
|
+
# Party 2: What does TEA need to succeed?
|
|
29
|
+
|
|
30
|
+
workflow:
|
|
31
|
+
name: 2party-tdd
|
|
32
|
+
description: Story refinement via two stakeholder parties, then TDD
|
|
33
|
+
version: "2.0.0"
|
|
34
|
+
|
|
35
|
+
phases:
|
|
36
|
+
- name: setup
|
|
37
|
+
agent: sm
|
|
38
|
+
output: [session_file, branches, story_context]
|
|
39
|
+
|
|
40
|
+
- name: refine-dev
|
|
41
|
+
agent: sm
|
|
42
|
+
input: [session_file, story_context]
|
|
43
|
+
output: [dev_gaps, refined_story]
|
|
44
|
+
instructions: |
|
|
45
|
+
Run a party-mode brainstorm with the prompt:
|
|
46
|
+
|
|
47
|
+
"What is missing from this story for Dev to be successful?"
|
|
48
|
+
|
|
49
|
+
Perspectives to include: Dev, Architect, Reviewer.
|
|
50
|
+
Focus areas: implementation clarity, acceptance criteria gaps,
|
|
51
|
+
ambiguous requirements, missing technical context, dependency risks.
|
|
52
|
+
|
|
53
|
+
Present findings to user. User decides what to add/change.
|
|
54
|
+
Update the story description with agreed refinements.
|
|
55
|
+
gate:
|
|
56
|
+
type: approval
|
|
57
|
+
condition: User reviewed dev-perspective gaps and decided on each item
|
|
58
|
+
|
|
59
|
+
- name: refine-tea
|
|
60
|
+
agent: sm
|
|
61
|
+
input: [session_file, refined_story]
|
|
62
|
+
output: [tea_gaps, refined_story]
|
|
63
|
+
instructions: |
|
|
64
|
+
Run a party-mode brainstorm with the prompt:
|
|
65
|
+
|
|
66
|
+
"What is missing from this story for TEA to be successful?"
|
|
67
|
+
|
|
68
|
+
Perspectives to include: TEA, Dev, Reviewer.
|
|
69
|
+
Focus areas: testability, acceptance criteria specificity,
|
|
70
|
+
edge cases, test data needs, integration test boundaries,
|
|
71
|
+
what "done" looks like in test terms.
|
|
72
|
+
|
|
73
|
+
Present findings to user. User decides what to add/change.
|
|
74
|
+
Update the story description with agreed refinements.
|
|
75
|
+
gate:
|
|
76
|
+
type: approval
|
|
77
|
+
condition: User reviewed tea-perspective gaps and decided on each item
|
|
78
|
+
|
|
79
|
+
- name: quality-pass
|
|
80
|
+
agent: sm
|
|
81
|
+
input: [refined_story, dev_gaps, tea_gaps]
|
|
82
|
+
output: [final_story]
|
|
83
|
+
instructions: |
|
|
84
|
+
Final quality check on the refined story before handoff to TEA.
|
|
85
|
+
|
|
86
|
+
Verify:
|
|
87
|
+
- Acceptance criteria are specific and testable
|
|
88
|
+
- No ambiguous language remains ("should", "maybe", "as needed")
|
|
89
|
+
- Implementation approach is clear enough for Dev
|
|
90
|
+
- Test strategy is clear enough for TEA
|
|
91
|
+
- Dependencies and blockers are documented
|
|
92
|
+
- Story scope hasn't crept beyond original intent
|
|
93
|
+
|
|
94
|
+
Fix any remaining issues, then hand off to TEA.
|
|
95
|
+
gate:
|
|
96
|
+
type: approval
|
|
97
|
+
condition: Story passes quality check and is ready for TEA
|
|
98
|
+
|
|
99
|
+
- name: red
|
|
100
|
+
agent: tea
|
|
101
|
+
input: [final_story, session_file]
|
|
102
|
+
output: [failing_tests]
|
|
103
|
+
instructions: |
|
|
104
|
+
Write failing tests for all acceptance criteria.
|
|
105
|
+
|
|
106
|
+
In addition to functional tests, include a quality gate check
|
|
107
|
+
that verifies new files pass the project's lint and format rules.
|
|
108
|
+
This catches code generation issues (wrong API usage, style
|
|
109
|
+
violations) at the test level rather than leaving them for review.
|
|
110
|
+
|
|
111
|
+
Examples by ecosystem:
|
|
112
|
+
- Node: spawn eslint and prettier --check on new files
|
|
113
|
+
- Go: spawn go vet and golangci-lint on new packages
|
|
114
|
+
- Python: spawn ruff check and ruff format --check
|
|
115
|
+
- Rust: spawn cargo clippy and cargo fmt --check
|
|
116
|
+
- Generic: check if the project has a top-level quality command
|
|
117
|
+
and spawn it (npm test, make lint, just check, etc.)
|
|
118
|
+
|
|
119
|
+
Include this as the last test function, e.g. testCodeQuality().
|
|
120
|
+
This ensures Dev can't commit GREEN without passing all gates.
|
|
121
|
+
|
|
122
|
+
In the TEA Assessment handoff, list what quality gates Dev
|
|
123
|
+
should expect to pass beyond the functional tests.
|
|
124
|
+
gate:
|
|
125
|
+
type: tests_fail
|
|
126
|
+
condition: All acceptance criteria have test coverage, including quality gate check
|
|
127
|
+
|
|
128
|
+
- name: green
|
|
129
|
+
agent: dev
|
|
130
|
+
input: [failing_tests, final_story]
|
|
131
|
+
output: [implementation, passing_tests]
|
|
132
|
+
instructions: |
|
|
133
|
+
Make tests GREEN. Implement minimal code to pass all failing tests.
|
|
134
|
+
Commit implementation. Push branch.
|
|
135
|
+
Hand off to QA/TEA for verification before review.
|
|
136
|
+
|
|
137
|
+
DO NOT create a PR — that happens in finish phase.
|
|
138
|
+
|
|
139
|
+
# QA verifies GREEN before Reviewer sees it
|
|
140
|
+
- name: verify
|
|
141
|
+
agent: tea
|
|
142
|
+
input: [implementation, passing_tests]
|
|
143
|
+
output: [verification_report]
|
|
144
|
+
instructions: |
|
|
145
|
+
QA verification of Dev's GREEN implementation.
|
|
146
|
+
|
|
147
|
+
Run the project's full quality gate — not just the new tests,
|
|
148
|
+
but everything CI would check: lint, format, type checks,
|
|
149
|
+
schema validation, and any other project-defined checks.
|
|
150
|
+
Use `/check` or `/run-ci` to discover and run all gates.
|
|
151
|
+
|
|
152
|
+
If verification fails, hand back to Dev with specifics.
|
|
153
|
+
If verification passes, hand off to Reviewer.
|
|
154
|
+
|
|
155
|
+
Reviewer should only receive code that is verified clean.
|
|
156
|
+
gate:
|
|
157
|
+
type: quality_pass
|
|
158
|
+
condition: >
|
|
159
|
+
All project quality gates pass locally — tests, lint, format,
|
|
160
|
+
type checks, and any CI-equivalent checks. Dev's implementation
|
|
161
|
+
is verified clean before Reviewer spends time on it.
|
|
162
|
+
|
|
163
|
+
- name: review
|
|
164
|
+
agent: reviewer
|
|
165
|
+
input: [verification_report, implementation, passing_tests]
|
|
166
|
+
output: [review_findings]
|
|
167
|
+
instructions: |
|
|
168
|
+
Adversarial code review. Write ALL findings to the story in
|
|
169
|
+
sprint/current-sprint.yaml under review_findings field.
|
|
170
|
+
|
|
171
|
+
On REJECT:
|
|
172
|
+
- Write findings with severity to story (review_findings field)
|
|
173
|
+
- Set review_verdict: rejected in story
|
|
174
|
+
- If findings are testable (logic bugs, missing edge cases):
|
|
175
|
+
Set workflow_phase to review-fix-tea → TEA writes failing tests first
|
|
176
|
+
- If findings are lint/format/dead-code only:
|
|
177
|
+
Set workflow_phase to review-fix-dev → Dev fixes directly
|
|
178
|
+
- DO NOT merge or create PRs
|
|
179
|
+
|
|
180
|
+
On APPROVE:
|
|
181
|
+
- Set review_verdict: approved in story
|
|
182
|
+
- DO NOT merge the PR — hand off to SM for finish phase
|
|
183
|
+
gate:
|
|
184
|
+
type: approval
|
|
185
|
+
condition: Code review passed, no blocking issues
|
|
186
|
+
|
|
187
|
+
# Review rejection loops — TEA writes tests for what Reviewer caught
|
|
188
|
+
- name: review-fix-tea
|
|
189
|
+
agent: tea
|
|
190
|
+
input: [review_findings, failing_tests]
|
|
191
|
+
output: [additional_failing_tests]
|
|
192
|
+
instructions: |
|
|
193
|
+
Reviewer found issues that tests missed. Read review_findings
|
|
194
|
+
from the story. Write failing tests for each testable finding.
|
|
195
|
+
Commit RED tests. Hand off to Dev.
|
|
196
|
+
gate:
|
|
197
|
+
type: tests_fail
|
|
198
|
+
condition: New tests cover reviewer findings
|
|
199
|
+
|
|
200
|
+
# Review rejection loop — Dev fixes all issues
|
|
201
|
+
- name: review-fix-dev
|
|
202
|
+
agent: dev
|
|
203
|
+
input: [review_findings, implementation]
|
|
204
|
+
output: [fixed_implementation]
|
|
205
|
+
instructions: |
|
|
206
|
+
Read review_findings from the story. Fix ALL findings:
|
|
207
|
+
- HIGH: Must fix (lint, format, dead code, logic)
|
|
208
|
+
- MEDIUM: Should fix
|
|
209
|
+
- LOW: Fix if trivial
|
|
210
|
+
|
|
211
|
+
Commit fixes. Push branch. Hand off to QA/TEA for verification.
|
|
212
|
+
Do NOT self-certify — someone else verifies your fix.
|
|
213
|
+
|
|
214
|
+
# QA verifies Dev's fixes before sending back to Reviewer
|
|
215
|
+
- name: review-fix-verify
|
|
216
|
+
agent: tea
|
|
217
|
+
input: [fixed_implementation, review_findings]
|
|
218
|
+
output: [verification_report]
|
|
219
|
+
instructions: |
|
|
220
|
+
QA verification step. Dev claims the fixes are done — verify it.
|
|
221
|
+
|
|
222
|
+
Run the project's full quality gate:
|
|
223
|
+
- Use `/check` or `/run-ci` to discover and run all gates
|
|
224
|
+
- Tests, lint, format, type checks, schema validation
|
|
225
|
+
- Confirm each review finding is actually addressed
|
|
226
|
+
|
|
227
|
+
If verification fails, hand back to Dev with specifics.
|
|
228
|
+
If verification passes, hand off to Reviewer for re-review.
|
|
229
|
+
gate:
|
|
230
|
+
type: quality_pass
|
|
231
|
+
condition: >
|
|
232
|
+
All project quality gates pass. Each review finding verified
|
|
233
|
+
as addressed. Code is clean enough for Reviewer's time.
|
|
234
|
+
next: review
|
|
235
|
+
|
|
236
|
+
# --- Post-implementation: PR lifecycle ---
|
|
237
|
+
|
|
238
|
+
- name: pr-prepare
|
|
239
|
+
agent: sm
|
|
240
|
+
input: [approval]
|
|
241
|
+
output: [pr_draft]
|
|
242
|
+
instructions: |
|
|
243
|
+
Prepare the PR for submission. This is our "one shot" with
|
|
244
|
+
the upstream maintainer — get it right before anyone sees it.
|
|
245
|
+
|
|
246
|
+
Steps:
|
|
247
|
+
1. Draft PR title and description locally (do not post yet)
|
|
248
|
+
2. Review the diff for:
|
|
249
|
+
- Unsigned commits
|
|
250
|
+
- Extra files that shouldn't be included
|
|
251
|
+
- Sensitive data leaks (.env, credentials, local paths)
|
|
252
|
+
- Missing sections in the PR description
|
|
253
|
+
3. Run CI-equivalent checks locally one final time
|
|
254
|
+
4. Present PR description and diff summary to user for approval
|
|
255
|
+
5. Only after user approves: create PR (draft by default,
|
|
256
|
+
or per user pr_mode preference in pennyfarthing config)
|
|
257
|
+
gate:
|
|
258
|
+
type: approval
|
|
259
|
+
condition: User has reviewed and approved PR content before submission
|
|
260
|
+
|
|
261
|
+
# External review triage — AI reviewers and humans will comment
|
|
262
|
+
- name: pr-review-triage
|
|
263
|
+
agent: sm
|
|
264
|
+
input: [pr_draft]
|
|
265
|
+
output: [external_review_analysis]
|
|
266
|
+
instructions: |
|
|
267
|
+
Monitor the PR for external reviews (AI bots like CodeRabbit,
|
|
268
|
+
human reviewers, maintainer feedback). When reviews arrive:
|
|
269
|
+
|
|
270
|
+
CRITICAL PRINCIPLES:
|
|
271
|
+
- External reviewers lack our context: ADRs, story intent,
|
|
272
|
+
architectural decisions, and why we chose this approach.
|
|
273
|
+
- Default stance: we do NOT adopt a suggestion unless the
|
|
274
|
+
team agrees it fits. Silence is not consent — we must
|
|
275
|
+
actively agree to adopt each suggestion.
|
|
276
|
+
- Communication between humans cannot be undone. Damage to
|
|
277
|
+
relationships with maintainers is permanent. Every reply
|
|
278
|
+
is drafted locally and approved by the user before posting.
|
|
279
|
+
|
|
280
|
+
For each review comment or suggestion:
|
|
281
|
+
1. Categorize: bug fix, style preference, architectural
|
|
282
|
+
concern, nitpick, misunderstanding, valid improvement
|
|
283
|
+
2. Gather context the reviewer is missing (ADRs, story
|
|
284
|
+
decisions, prior art in the codebase)
|
|
285
|
+
3. Present to user with initial assessment
|
|
286
|
+
|
|
287
|
+
When comments are gathered, hand off to pr-review-party
|
|
288
|
+
for structured evaluation.
|
|
289
|
+
|
|
290
|
+
- name: pr-review-party
|
|
291
|
+
agent: sm
|
|
292
|
+
input: [external_review_analysis]
|
|
293
|
+
output: [review_decisions]
|
|
294
|
+
instructions: |
|
|
295
|
+
Run a party-mode evaluation of external review comments.
|
|
296
|
+
|
|
297
|
+
Prompt (tune as needed):
|
|
298
|
+
"Evaluate each external review suggestion against:
|
|
299
|
+
1. The intent and scope of this PR
|
|
300
|
+
2. Fit with project architecture and ADRs
|
|
301
|
+
3. Viability — does the proposed fix actually work?
|
|
302
|
+
4. Negative impact — could this fix break something else?
|
|
303
|
+
5. Precedent — does this conflict with established patterns?
|
|
304
|
+
6. Effort vs value — is this worth doing now?"
|
|
305
|
+
|
|
306
|
+
Perspectives: Dev, Architect, Reviewer, PM.
|
|
307
|
+
|
|
308
|
+
For each suggestion, produce one of:
|
|
309
|
+
- ADOPT: Team agrees. Will fix, test, and reply with thanks.
|
|
310
|
+
- DECLINE: Doesn't fit. Draft a respectful reply explaining
|
|
311
|
+
why, with context the reviewer was missing.
|
|
312
|
+
- DEFER: Valid but out of scope. Draft reply acknowledging
|
|
313
|
+
the point and noting it for a future PR/issue.
|
|
314
|
+
- CLARIFY: Need more info from the reviewer. Draft a question.
|
|
315
|
+
|
|
316
|
+
Present decisions to user. User has final say on every item.
|
|
317
|
+
gate:
|
|
318
|
+
type: approval
|
|
319
|
+
condition: User has decided on every external review comment
|
|
320
|
+
|
|
321
|
+
- name: pr-review-respond
|
|
322
|
+
agent: dev
|
|
323
|
+
input: [review_decisions]
|
|
324
|
+
output: [fixes, draft_replies]
|
|
325
|
+
instructions: |
|
|
326
|
+
For each ADOPT decision:
|
|
327
|
+
1. Implement the fix
|
|
328
|
+
2. Write or update tests if needed
|
|
329
|
+
3. Run full quality gate
|
|
330
|
+
4. Draft a reply comment (e.g., "Good catch, fixed in abc123")
|
|
331
|
+
|
|
332
|
+
For each DECLINE/DEFER/CLARIFY decision:
|
|
333
|
+
1. Draft a reply comment explaining the team's position
|
|
334
|
+
2. Include context the reviewer was missing
|
|
335
|
+
3. Be respectful — this is a relationship, not a debate
|
|
336
|
+
|
|
337
|
+
CRITICAL: Do NOT post any comments. All replies are drafted
|
|
338
|
+
locally and presented to the user for approval. The user may
|
|
339
|
+
edit wording, tone, or content before any reply is posted.
|
|
340
|
+
|
|
341
|
+
Commit fixes. Push branch. Present all draft replies to user.
|
|
342
|
+
gate:
|
|
343
|
+
type: approval
|
|
344
|
+
condition: >
|
|
345
|
+
User has approved every draft reply. Fixes pass quality
|
|
346
|
+
gates. No reply is posted without explicit user approval.
|
|
347
|
+
|
|
348
|
+
- name: pr-replies-post
|
|
349
|
+
agent: sm
|
|
350
|
+
input: [draft_replies]
|
|
351
|
+
output: [posted_replies]
|
|
352
|
+
instructions: |
|
|
353
|
+
Post user-approved replies to the PR. For each reply:
|
|
354
|
+
1. Confirm user approval one final time
|
|
355
|
+
2. Post the comment via gh CLI
|
|
356
|
+
3. Log the posted reply for audit
|
|
357
|
+
|
|
358
|
+
After all replies posted, return to pr-review-triage to
|
|
359
|
+
monitor for follow-up comments. This loop continues until
|
|
360
|
+
the PR is merged, closed, or the user decides to stop.
|
|
361
|
+
next: pr-monitor
|
|
362
|
+
|
|
363
|
+
- name: pr-monitor
|
|
364
|
+
agent: sm
|
|
365
|
+
input: [posted_replies]
|
|
366
|
+
output: [pr_status]
|
|
367
|
+
instructions: |
|
|
368
|
+
Monitor the PR status. Check for:
|
|
369
|
+
- New review comments → back to pr-review-triage
|
|
370
|
+
- CI failures → hand to Dev for fixes
|
|
371
|
+
- Approval from maintainer → update story status
|
|
372
|
+
- Merge → move to pr-complete
|
|
373
|
+
- Close (rejected) → move to pr-complete with rejected status
|
|
374
|
+
|
|
375
|
+
Update the story workflow_phase as status changes.
|
|
376
|
+
If new comments arrive, loop back to pr-review-triage.
|
|
377
|
+
next_on:
|
|
378
|
+
new_comments: pr-review-triage
|
|
379
|
+
ci_failure: review-fix-dev
|
|
380
|
+
merged: pr-complete
|
|
381
|
+
closed: pr-complete
|
|
382
|
+
|
|
383
|
+
- name: pr-complete
|
|
384
|
+
agent: sm
|
|
385
|
+
input: [pr_status]
|
|
386
|
+
output: [archived_session, story_summary]
|
|
387
|
+
instructions: |
|
|
388
|
+
PR is merged or closed. Finalize the story:
|
|
389
|
+
1. Update story status (done if merged, blocked/cancelled if closed)
|
|
390
|
+
2. Update Jira ticket
|
|
391
|
+
3. Archive session file
|
|
392
|
+
4. Clean up branches if merged
|
|
393
|
+
5. Write story summary for sprint record
|
|
394
|
+
|
|
395
|
+
triggers:
|
|
396
|
+
types: [feature, enhancement]
|
|
397
|
+
tags: [2party, refinement, complex]
|
|
398
|
+
points:
|
|
399
|
+
min: 3
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Architecture Workflow - Migrated from BMAD format
|
|
2
|
+
# Collaborative architectural decision-making with progressive disclosure
|
|
3
|
+
#
|
|
4
|
+
# Flow: Initialize → [Continue?] → Context → Patterns → Components → Interfaces → Risks → Document
|
|
5
|
+
# Use for architectural decisions, system design, and technical planning
|
|
6
|
+
#
|
|
7
|
+
# BMAD Enhancements:
|
|
8
|
+
# - Continuation handler (step-01b) for resuming workflows
|
|
9
|
+
# - A/P/C menus: Advanced Elicitation, Party Mode, Continue
|
|
10
|
+
# - Web search integration for current technology versions
|
|
11
|
+
# - AI agent consistency focus in component and risk steps
|
|
12
|
+
# - Pre-documentation validation checks
|
|
13
|
+
|
|
14
|
+
workflow:
|
|
15
|
+
name: architecture
|
|
16
|
+
description: Collaborative architectural decision facilitation for AI-agent consistency. Produces a decision-focused architecture document optimized for preventing agent conflicts through step-by-step discovery with A/P/C collaboration menus.
|
|
17
|
+
version: "2.0.0"
|
|
18
|
+
type: stepped
|
|
19
|
+
|
|
20
|
+
# Step configuration
|
|
21
|
+
steps:
|
|
22
|
+
path: ./steps/
|
|
23
|
+
pattern: step-{nn}-*.md
|
|
24
|
+
# Note: step-01b-continue.md is loaded conditionally by step-01 when existing workflow detected
|
|
25
|
+
|
|
26
|
+
# Variables available in step files
|
|
27
|
+
variables:
|
|
28
|
+
project_root: .
|
|
29
|
+
planning_artifacts: ./artifacts
|
|
30
|
+
output_file: artifacts/architecture.md
|
|
31
|
+
input_required:
|
|
32
|
+
- prd
|
|
33
|
+
|
|
34
|
+
# User approval gates - pause for confirmation at key decision points
|
|
35
|
+
# Steps with A/P/C menus naturally pause; these are the formal gates
|
|
36
|
+
gates:
|
|
37
|
+
after_steps: [2, 4, 6]
|
|
38
|
+
gate_marker: "<!-- GATE -->"
|
|
39
|
+
|
|
40
|
+
# Collaboration menus available in steps
|
|
41
|
+
collaboration:
|
|
42
|
+
menus:
|
|
43
|
+
- key: A
|
|
44
|
+
name: Advanced Elicitation
|
|
45
|
+
description: Use discovery protocols to develop deeper insights
|
|
46
|
+
- key: P
|
|
47
|
+
name: Party Mode
|
|
48
|
+
description: Bring multiple perspectives to analyze from different angles
|
|
49
|
+
- key: C
|
|
50
|
+
name: Continue
|
|
51
|
+
description: Save content and proceed to next step
|
|
52
|
+
- key: R
|
|
53
|
+
name: Revise
|
|
54
|
+
description: Need to gather more information or make changes
|
|
55
|
+
|
|
56
|
+
# Output template
|
|
57
|
+
template: ./templates/architecture-decision.md
|
|
58
|
+
|
|
59
|
+
# Agent assignment
|
|
60
|
+
agent: architect
|
|
61
|
+
|
|
62
|
+
# Triggers - when to suggest this workflow
|
|
63
|
+
triggers:
|
|
64
|
+
types: [architecture, design, adr, system-design]
|
|
65
|
+
tags: [architecture, stepped]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# BDD Tandem Workflow - BDD with Full Tandem Chain
|
|
2
|
+
# Extends standard BDD with tandem observers:
|
|
3
|
+
# - Architect backseats UX-Designer during design
|
|
4
|
+
# - UX-Designer backseats Dev during implementation
|
|
5
|
+
# - PM backseats Reviewer during review
|
|
6
|
+
#
|
|
7
|
+
# Flow: SM → UX-Designer (+Architect) → TEA → Dev (+UX-Designer) → Reviewer (+PM) → SM
|
|
8
|
+
|
|
9
|
+
workflow:
|
|
10
|
+
name: bdd-tandem
|
|
11
|
+
description: BDD with full tandem chain across design, implementation, and review
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
|
|
14
|
+
phases:
|
|
15
|
+
- name: setup
|
|
16
|
+
agent: sm
|
|
17
|
+
output: [session_file, branches, story_context]
|
|
18
|
+
|
|
19
|
+
- name: design
|
|
20
|
+
agent: ux-designer
|
|
21
|
+
input: [session_file, story_context]
|
|
22
|
+
output: [design_spec, user_flows, wireframes, behavior_scenarios]
|
|
23
|
+
gate:
|
|
24
|
+
type: design_review
|
|
25
|
+
condition: UX spec defines user flows and acceptance behaviors
|
|
26
|
+
tandem:
|
|
27
|
+
partner: architect
|
|
28
|
+
scope: file-watch
|
|
29
|
+
|
|
30
|
+
- name: red
|
|
31
|
+
agent: tea
|
|
32
|
+
input: [design_spec, behavior_scenarios, story_context]
|
|
33
|
+
output: [failing_tests]
|
|
34
|
+
gate:
|
|
35
|
+
type: tests_fail
|
|
36
|
+
condition: Behavior scenarios have test coverage
|
|
37
|
+
|
|
38
|
+
- name: green
|
|
39
|
+
agent: dev
|
|
40
|
+
input: [failing_tests, design_spec, story_context]
|
|
41
|
+
output: [implementation, passing_tests]
|
|
42
|
+
gate:
|
|
43
|
+
type: tests_pass
|
|
44
|
+
condition: All tests passing, UX spec implemented
|
|
45
|
+
tandem:
|
|
46
|
+
partner: ux-designer
|
|
47
|
+
scope: file-watch
|
|
48
|
+
|
|
49
|
+
- name: review
|
|
50
|
+
agent: reviewer
|
|
51
|
+
input: [implementation, passing_tests, design_spec]
|
|
52
|
+
output: [approval]
|
|
53
|
+
gate:
|
|
54
|
+
type: approval
|
|
55
|
+
condition: Code review approved, UX requirements met
|
|
56
|
+
tandem:
|
|
57
|
+
partner: pm
|
|
58
|
+
scope: file-watch
|
|
59
|
+
|
|
60
|
+
- name: finish
|
|
61
|
+
agent: sm
|
|
62
|
+
input: [approval]
|
|
63
|
+
output: [archived_session, story_summary]
|
|
64
|
+
|
|
65
|
+
triggers:
|
|
66
|
+
types: [ui, ux, behavior, component, settings]
|
|
67
|
+
tags: [bdd-tandem, tandem, ux-first]
|
|
68
|
+
points:
|
|
69
|
+
min: 3
|
|
70
|
+
default: false
|