@pennyfarthing/core 10.1.0 → 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 +13 -18
- package/package.json +3 -1
- 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 +101 -15
- 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/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.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/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/handoff.md +18 -3
- 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 -5
- package/pennyfarthing-dist/agents/tandem-backseat.md +119 -0
- package/pennyfarthing-dist/commands/setup.md +4 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +62 -6
- package/pennyfarthing-dist/guides/bikelane.md +3 -2
- package/pennyfarthing-dist/guides/scale-levels.md +4 -6
- 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/hooks/bell-mode-hook.sh +131 -54
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +20 -10
- package/pennyfarthing-dist/scripts/misc/statusline.sh +50 -8
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +10 -189
- package/pennyfarthing-dist/skills/skill-registry.schema.json +8 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +1 -1
- package/pennyfarthing-dist/skills/sprint/skill.md +25 -2
- package/pennyfarthing-dist/skills/workflow/skill.md +24 -1
- package/pennyfarthing-dist/workflows/architecture/workflow.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +70 -0
- 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 +11 -6
- package/pennyfarthing_scripts/codemarkers/__init__.py +5 -1
- 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 +177 -2
- package/pennyfarthing_scripts/codemarkers/cli.py +50 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +0 -1
- package/pennyfarthing_scripts/codemarkers/models.py +15 -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 +1 -1
- 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 +1 -1
- package/pennyfarthing_scripts/complexity/cli.py +5 -1
- package/pennyfarthing_scripts/complexity/formatters.py +1 -1
- package/pennyfarthing_scripts/context.py +14 -15
- 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 +3 -4
- package/pennyfarthing_scripts/deadcode/cli.py +2 -2
- package/pennyfarthing_scripts/dependencies/__init__.py +2 -2
- 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 +1 -1
- package/pennyfarthing_scripts/dependencies/cli.py +8 -4
- package/pennyfarthing_scripts/dependencies/formatters.py +1 -1
- 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 +2 -2
- package/pennyfarthing_scripts/healthscore/__main__.py +8 -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 +451 -21
- package/pennyfarthing_scripts/healthscore/cli.py +5 -1
- package/pennyfarthing_scripts/healthscore/models.py +0 -1
- 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 +128 -14
- package/pennyfarthing_scripts/hotspots/cli.py +2 -2
- 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 +2 -3
- package/pennyfarthing_scripts/jira/claim.py +21 -0
- package/pennyfarthing_scripts/jira/cli.py +2 -2
- package/pennyfarthing_scripts/jira/client.py +4 -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 +1 -4
- package/pennyfarthing_scripts/sprint/cli.py +34 -28
- 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 +2 -2
- package/pennyfarthing_scripts/sprint/story_finish.py +3 -5
- 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 +1 -4
- 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 +13 -8
- 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 +17 -25
- 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/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/theme/cli.py +3 -2
- 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 +3 -15
- 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
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# BMAD Dev-Story Workflow - Imported for BMAD Compatibility
|
|
2
|
-
#
|
|
3
|
-
# This is a reference workflow imported from BMAD for compatibility with
|
|
4
|
-
# BMAD-based projects. It is NOT a replacement for Pennyfarthing's native
|
|
5
|
-
# TDD workflow (tdd.yaml).
|
|
6
|
-
#
|
|
7
|
-
# Key differences from Pennyfarthing TDD:
|
|
8
|
-
# - Single-agent execution (Dev only)
|
|
9
|
-
# - XML-based procedural instructions (10 steps)
|
|
10
|
-
# - Integrated test writing within implementation flow
|
|
11
|
-
# - Updates BMAD sprint-status.yaml format
|
|
12
|
-
#
|
|
13
|
-
# For Pennyfarthing projects, use tdd.yaml which provides:
|
|
14
|
-
# - Multi-agent orchestration (SM, TEA, Dev, Reviewer)
|
|
15
|
-
# - Phase-based workflow with handoffs
|
|
16
|
-
# - Session file state tracking
|
|
17
|
-
#
|
|
18
|
-
# Source: BMAD-METHOD/src/modules/bmm/workflows/4-implementation/dev-story/
|
|
19
|
-
# Migrated: 2026-01-21
|
|
20
|
-
|
|
21
|
-
workflow:
|
|
22
|
-
name: dev-story
|
|
23
|
-
description: |
|
|
24
|
-
BMAD reference workflow: Execute a story by implementing tasks/subtasks,
|
|
25
|
-
writing tests, validating, and updating the story file per acceptance criteria.
|
|
26
|
-
This is imported for BMAD compatibility - use tdd.yaml for Pennyfarthing projects.
|
|
27
|
-
version: "1.0.0"
|
|
28
|
-
type: procedural
|
|
29
|
-
author: BMad
|
|
30
|
-
|
|
31
|
-
# Primary agent for this workflow
|
|
32
|
-
agent: dev
|
|
33
|
-
|
|
34
|
-
# Instructions and validation files
|
|
35
|
-
instructions: ./instructions.xml
|
|
36
|
-
checklist: ./checklist.md
|
|
37
|
-
|
|
38
|
-
# Variables available in instruction files
|
|
39
|
-
variables:
|
|
40
|
-
project_root: .
|
|
41
|
-
story_dir: ./artifacts/stories
|
|
42
|
-
implementation_artifacts: ./artifacts
|
|
43
|
-
sprint_status: ./artifacts/sprint-status.yaml
|
|
44
|
-
project_context: "**/project-context.md"
|
|
45
|
-
|
|
46
|
-
# Triggers - when to suggest this workflow
|
|
47
|
-
triggers:
|
|
48
|
-
types: [bmad-story, bmad-dev]
|
|
49
|
-
tags: [bmad, reference, procedural]
|
|
50
|
-
# NOT default - TDD is the default for Pennyfarthing
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: 'step-01-understand'
|
|
3
|
-
description: 'Analyze the requirement delta between current state and what user wants to build'
|
|
4
|
-
|
|
5
|
-
workflow_path: '{project_root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec'
|
|
6
|
-
nextStepFile: './step-02-investigate.md'
|
|
7
|
-
skipToStepFile: './step-03-generate.md'
|
|
8
|
-
templateFile: '{workflow_path}/tech-spec-template.md'
|
|
9
|
-
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
<purpose>
|
|
13
|
-
Analyze the requirement delta between the current state and what the user wants to build. Establish a verifiable delta between current and target state by eliciting requirements, performing surface-level code scans, and initializing a work-in-progress technical specification document.
|
|
14
|
-
</purpose>
|
|
15
|
-
|
|
16
|
-
<instructions>
|
|
17
|
-
Execute the sequence of instructions in order: Check for existing WIP (with recovery menu), greet user and gather initial request, perform quick orient scan, ask informed questions based on findings, capture core understanding with user confirmation, initialize WIP file with template and metadata, and present checkpoint menu for next steps (Advanced Elicitation, Continue, or Party Mode).
|
|
18
|
-
</instructions>
|
|
19
|
-
|
|
20
|
-
<output>
|
|
21
|
-
WIP file initialized at {wipFile} with captured metadata (title, slug, created date, status, stepsCompleted: [1]), Overview section with Problem Statement/Solution/Scope, and Context for Development section. User selected to continue to next step.
|
|
22
|
-
</output>
|
|
23
|
-
|
|
24
|
-
# Step 1: Analyze Requirement Delta
|
|
25
|
-
|
|
26
|
-
**Progress: Step 1 of 4** - Next: Deep Investigation
|
|
27
|
-
|
|
28
|
-
## RULES:
|
|
29
|
-
|
|
30
|
-
- MUST NOT skip steps.
|
|
31
|
-
- MUST NOT optimize sequence.
|
|
32
|
-
- MUST follow exact instructions.
|
|
33
|
-
- MUST NOT look ahead to future steps.
|
|
34
|
-
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
35
|
-
|
|
36
|
-
## CONTEXT:
|
|
37
|
-
|
|
38
|
-
- Variables from `workflow.md` are available in memory.
|
|
39
|
-
- Focus: Define the technical requirement delta and scope.
|
|
40
|
-
- Investigation: Perform surface-level code scans ONLY to verify the delta. Reserve deep dives into implementation consequences for Step 2.
|
|
41
|
-
- Objective: Establish a verifiable delta between current state and target state.
|
|
42
|
-
|
|
43
|
-
## SEQUENCE OF INSTRUCTIONS
|
|
44
|
-
|
|
45
|
-
### 0. Check for Work in Progress
|
|
46
|
-
|
|
47
|
-
a) **Before anything else, check if `{wipFile}` exists:**
|
|
48
|
-
|
|
49
|
-
b) **IF WIP FILE EXISTS:**
|
|
50
|
-
|
|
51
|
-
1. Read the frontmatter and extract: `title`, `slug`, `stepsCompleted`
|
|
52
|
-
2. Calculate progress: `lastStep = max(stepsCompleted)`
|
|
53
|
-
3. Present to user:
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
Hey {user_name}! Found a tech-spec in progress:
|
|
57
|
-
|
|
58
|
-
**{title}** - Step {lastStep} of 4 complete
|
|
59
|
-
|
|
60
|
-
Is this what you're here to continue?
|
|
61
|
-
|
|
62
|
-
[y] Yes, pick up where I left off
|
|
63
|
-
[n] No, archive it and start something new
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
4. **HALT and wait for user selection.**
|
|
67
|
-
|
|
68
|
-
a) **Menu Handling:**
|
|
69
|
-
|
|
70
|
-
- **[y] Continue existing:**
|
|
71
|
-
- Jump directly to the appropriate step based on `stepsCompleted`:
|
|
72
|
-
- `[1]` → Load `{nextStepFile}` (Step 2)
|
|
73
|
-
- `[1, 2]` → Load `{skipToStepFile}` (Step 3)
|
|
74
|
-
- `[1, 2, 3]` → Load `./step-04-review.md` (Step 4)
|
|
75
|
-
- **[n] Archive and start fresh:**
|
|
76
|
-
- Rename `{wipFile}` to `{implementation_artifacts}/tech-spec-{slug}-archived-{date}.md`
|
|
77
|
-
|
|
78
|
-
### 1. Greet and Ask for Initial Request
|
|
79
|
-
|
|
80
|
-
a) **Greet the user briefly:**
|
|
81
|
-
|
|
82
|
-
"Hey {user_name}! What are we building today?"
|
|
83
|
-
|
|
84
|
-
b) **Get their initial description.** Don't ask detailed questions yet - just understand enough to know where to look.
|
|
85
|
-
|
|
86
|
-
### 2. Quick Orient Scan
|
|
87
|
-
|
|
88
|
-
a) **Before asking detailed questions, do a rapid scan to understand the landscape:**
|
|
89
|
-
|
|
90
|
-
b) **Check for existing context docs:**
|
|
91
|
-
|
|
92
|
-
- Check `{output_folder}` and `{planning_artifacts}`for planning documents (PRD, architecture, epics, research)
|
|
93
|
-
- Check for `**/project-context.md` - if it exists, skim for patterns and conventions
|
|
94
|
-
- Check for any existing stories or specs related to user's request
|
|
95
|
-
|
|
96
|
-
c) **If user mentioned specific code/features, do a quick scan:**
|
|
97
|
-
|
|
98
|
-
- Search for relevant files/classes/functions they mentioned
|
|
99
|
-
- Skim the structure (don't deep-dive yet - that's Step 2)
|
|
100
|
-
- Note: tech stack, obvious patterns, file locations
|
|
101
|
-
|
|
102
|
-
d) **Build mental model:**
|
|
103
|
-
|
|
104
|
-
- What's the likely landscape for this feature?
|
|
105
|
-
- What's the likely scope based on what you found?
|
|
106
|
-
- What questions do you NOW have, informed by the code?
|
|
107
|
-
|
|
108
|
-
**This scan should take < 30 seconds. Just enough to ask smart questions.**
|
|
109
|
-
|
|
110
|
-
### 3. Ask Informed Questions
|
|
111
|
-
|
|
112
|
-
a) **Now ask clarifying questions - but make them INFORMED by what you found:**
|
|
113
|
-
|
|
114
|
-
Instead of generic questions like "What's the scope?", ask specific ones like:
|
|
115
|
-
- "`AuthService` handles validation in the controller — should the new field follow that pattern or move it to a dedicated validator?"
|
|
116
|
-
- "`NavigationSidebar` component uses local state for the 'collapsed' toggle — should we stick with that or move it to the global store?"
|
|
117
|
-
- "The epics doc mentions X - is this related?"
|
|
118
|
-
|
|
119
|
-
**Adapt to {user_skill_level}.** Technical users want technical questions. Non-technical users need translation.
|
|
120
|
-
|
|
121
|
-
b) **If no existing code is found:**
|
|
122
|
-
|
|
123
|
-
- Ask about intended architecture, patterns, constraints
|
|
124
|
-
- Ask what similar systems they'd like to emulate
|
|
125
|
-
|
|
126
|
-
### 4. Capture Core Understanding
|
|
127
|
-
|
|
128
|
-
a) **From the conversation, extract and confirm:**
|
|
129
|
-
|
|
130
|
-
- **Title**: A clear, concise name for this work
|
|
131
|
-
- **Slug**: URL-safe version of title (lowercase, hyphens, no spaces)
|
|
132
|
-
- **Problem Statement**: What problem are we solving?
|
|
133
|
-
- **Solution**: High-level approach (1-2 sentences)
|
|
134
|
-
- **In Scope**: What's included
|
|
135
|
-
- **Out of Scope**: What's explicitly NOT included
|
|
136
|
-
|
|
137
|
-
b) **Ask the user to confirm the captured understanding before proceeding.**
|
|
138
|
-
|
|
139
|
-
### 5. Initialize WIP File
|
|
140
|
-
|
|
141
|
-
a) **Create the tech-spec WIP file:**
|
|
142
|
-
|
|
143
|
-
1. Copy template from `{templateFile}`
|
|
144
|
-
2. Write to `{wipFile}`
|
|
145
|
-
3. Update frontmatter with captured values:
|
|
146
|
-
```yaml
|
|
147
|
-
---
|
|
148
|
-
title: '{title}'
|
|
149
|
-
slug: '{slug}'
|
|
150
|
-
created: '{date}'
|
|
151
|
-
status: 'in-progress'
|
|
152
|
-
stepsCompleted: [1]
|
|
153
|
-
tech_stack: []
|
|
154
|
-
files_to_modify: []
|
|
155
|
-
code_patterns: []
|
|
156
|
-
test_patterns: []
|
|
157
|
-
---
|
|
158
|
-
```
|
|
159
|
-
4. Fill in Overview section with Problem Statement, Solution, and Scope
|
|
160
|
-
5. Fill in Context for Development section with any technical preferences or constraints gathered during informed discovery.
|
|
161
|
-
6. Write the file
|
|
162
|
-
|
|
163
|
-
b) **Report to user:**
|
|
164
|
-
|
|
165
|
-
"Created: `{wipFile}`
|
|
166
|
-
|
|
167
|
-
**Captured:**
|
|
168
|
-
|
|
169
|
-
- Title: {title}
|
|
170
|
-
- Problem: {problem_statement_summary}
|
|
171
|
-
- Scope: {scope_summary}"
|
|
172
|
-
|
|
173
|
-
### 6. Present Checkpoint Menu
|
|
174
|
-
|
|
175
|
-
a) **Display menu:**
|
|
176
|
-
|
|
177
|
-
```
|
|
178
|
-
[a] Advanced Elicitation - dig deeper into requirements
|
|
179
|
-
[c] Continue - proceed to next step
|
|
180
|
-
[p] Party Mode - bring in other experts
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
b) **HALT and wait for user selection.**
|
|
184
|
-
|
|
185
|
-
#### Menu Handling:
|
|
186
|
-
|
|
187
|
-
- **[a]**: Load and execute `{advanced_elicitation}`, then return here and redisplay menu
|
|
188
|
-
- **[c]**: Load and execute `{nextStepFile}` (Map Technical Constraints)
|
|
189
|
-
- **[p]**: Load and execute `{party_mode_exec}`, then return here and redisplay menu
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## REQUIRED OUTPUTS:
|
|
194
|
-
|
|
195
|
-
- MUST initialize WIP file with captured metadata.
|
|
196
|
-
|
|
197
|
-
## VERIFICATION CHECKLIST:
|
|
198
|
-
|
|
199
|
-
- [ ] WIP check performed FIRST before any greeting.
|
|
200
|
-
- [ ] `{wipFile}` created with correct frontmatter, Overview, Context for Development, and `stepsCompleted: [1]`.
|
|
201
|
-
- [ ] User selected [c] to continue.
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: 'step-02-investigate'
|
|
3
|
-
description: 'Map technical constraints and anchor points within the codebase'
|
|
4
|
-
|
|
5
|
-
workflow_path: '{project_root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec'
|
|
6
|
-
nextStepFile: './step-03-generate.md'
|
|
7
|
-
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
<purpose>
|
|
11
|
-
Map technical constraints and anchor points within the codebase to provide implementation-ready ground truth. Build on the Quick Scan from Step 1 with deep investigation to identify exact files to modify, code patterns to follow, and technical constraints that will impact implementation.
|
|
12
|
-
</purpose>
|
|
13
|
-
|
|
14
|
-
<instructions>
|
|
15
|
-
Load the WIP file from Step 1, execute universal code investigation by reading and analyzing relevant files/directories, document technical context (tech stack, code patterns, files to modify, test patterns), look for project-context.md if not already loaded, update WIP file frontmatter and Context for Development section, and present checkpoint menu for Advanced Elicitation, Continue, or Party Mode.
|
|
16
|
-
</instructions>
|
|
17
|
-
|
|
18
|
-
<output>
|
|
19
|
-
WIP file updated with documented technical context including tech_stack, files_to_modify, code_patterns, and test_patterns in frontmatter. Context for Development section filled with Codebase Patterns, Files to Reference table, and Technical Decisions. User confirmed with [c] to continue to Step 3.
|
|
20
|
-
</output>
|
|
21
|
-
|
|
22
|
-
# Step 2: Map Technical Constraints & Anchor Points
|
|
23
|
-
|
|
24
|
-
**Progress: Step 2 of 4** - Next: Generate Plan
|
|
25
|
-
|
|
26
|
-
## RULES:
|
|
27
|
-
|
|
28
|
-
- MUST NOT skip steps.
|
|
29
|
-
- MUST NOT optimize sequence.
|
|
30
|
-
- MUST follow exact instructions.
|
|
31
|
-
- MUST NOT generate the full spec yet (that's Step 3).
|
|
32
|
-
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
33
|
-
|
|
34
|
-
## CONTEXT:
|
|
35
|
-
|
|
36
|
-
- Requires `{wipFile}` from Step 1 with the "Problem Statement" defined.
|
|
37
|
-
- Focus: Map the problem statement to specific anchor points in the codebase.
|
|
38
|
-
- Output: Exact files to touch, classes/patterns to extend, and technical constraints identified.
|
|
39
|
-
- Objective: Provide the implementation-ready ground truth for the plan.
|
|
40
|
-
|
|
41
|
-
## SEQUENCE OF INSTRUCTIONS
|
|
42
|
-
|
|
43
|
-
### 1. Load Current State
|
|
44
|
-
|
|
45
|
-
**Read `{wipFile}` and extract:**
|
|
46
|
-
|
|
47
|
-
- Problem statement and scope from Overview section
|
|
48
|
-
- Any context gathered in Step 1
|
|
49
|
-
|
|
50
|
-
### 2. Execute Investigation Path
|
|
51
|
-
|
|
52
|
-
**Universal Code Investigation:**
|
|
53
|
-
|
|
54
|
-
_Isolate deep exploration in sub-agents/tasks where available. Return distilled summaries only to prevent context snowballing._
|
|
55
|
-
|
|
56
|
-
a) **Build on Step 1's Quick Scan**
|
|
57
|
-
|
|
58
|
-
Review what was found in Step 1's orient scan. Then ask:
|
|
59
|
-
|
|
60
|
-
"Based on my quick look, I see [files/patterns found]. Are there other files or directories I should investigate deeply?"
|
|
61
|
-
|
|
62
|
-
b) **Read and Analyze Code**
|
|
63
|
-
|
|
64
|
-
For each file/directory provided:
|
|
65
|
-
|
|
66
|
-
- Read the complete file(s)
|
|
67
|
-
- Identify patterns, conventions, coding style
|
|
68
|
-
- Note dependencies and imports
|
|
69
|
-
- Find related test files
|
|
70
|
-
|
|
71
|
-
**If NO relevant code is found (Clean Slate):**
|
|
72
|
-
|
|
73
|
-
- Identify the target directory where the feature should live.
|
|
74
|
-
- Scan parent directories for architectural context.
|
|
75
|
-
- Identify standard project utilities or boilerplate that SHOULD be used.
|
|
76
|
-
- Document this as "Confirmed Clean Slate" - establishing that no legacy constraints exist.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
c) **Document Technical Context**
|
|
80
|
-
|
|
81
|
-
Capture and confirm with user:
|
|
82
|
-
|
|
83
|
-
- **Tech Stack**: Languages, frameworks, libraries
|
|
84
|
-
- **Code Patterns**: Architecture patterns, naming conventions, file structure
|
|
85
|
-
- **Files to Modify/Create**: Specific files that will need changes or new files to be created
|
|
86
|
-
- **Test Patterns**: How tests are structured, test frameworks used
|
|
87
|
-
|
|
88
|
-
d) **Look for project-context.md**
|
|
89
|
-
|
|
90
|
-
If `**/project-context.md` exists and wasn't loaded in Step 1:
|
|
91
|
-
|
|
92
|
-
- Load it now
|
|
93
|
-
- Extract patterns and conventions
|
|
94
|
-
- Note any rules that must be followed
|
|
95
|
-
|
|
96
|
-
### 3. Update WIP File
|
|
97
|
-
|
|
98
|
-
**Update `{wipFile}` frontmatter:**
|
|
99
|
-
|
|
100
|
-
```yaml
|
|
101
|
-
---
|
|
102
|
-
# ... existing frontmatter ...
|
|
103
|
-
stepsCompleted: [1, 2]
|
|
104
|
-
tech_stack: ['{captured_tech_stack}']
|
|
105
|
-
files_to_modify: ['{captured_files}']
|
|
106
|
-
code_patterns: ['{captured_patterns}']
|
|
107
|
-
test_patterns: ['{captured_test_patterns}']
|
|
108
|
-
---
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**Update the Context for Development section:**
|
|
112
|
-
|
|
113
|
-
Fill in:
|
|
114
|
-
|
|
115
|
-
- Codebase Patterns (from investigation)
|
|
116
|
-
- Files to Reference table (files reviewed)
|
|
117
|
-
- Technical Decisions (any decisions made during investigation)
|
|
118
|
-
|
|
119
|
-
**Report to user:**
|
|
120
|
-
|
|
121
|
-
"**Context Gathered:**
|
|
122
|
-
|
|
123
|
-
- Tech Stack: {tech_stack_summary}
|
|
124
|
-
- Files to Modify: {files_count} files identified
|
|
125
|
-
- Patterns: {patterns_summary}
|
|
126
|
-
- Tests: {test_patterns_summary}"
|
|
127
|
-
|
|
128
|
-
### 4. Present Checkpoint Menu
|
|
129
|
-
|
|
130
|
-
**Display menu:**
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
[a] Advanced Elicitation - explore more context
|
|
134
|
-
[c] Continue - proceed to Generate Spec
|
|
135
|
-
[p] Party Mode - bring in other experts
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**HALT and wait for user selection.**
|
|
139
|
-
|
|
140
|
-
#### Menu Handling:
|
|
141
|
-
|
|
142
|
-
- **[a]**: Load and execute `{advanced_elicitation}`, then return here and redisplay menu
|
|
143
|
-
- **[c]**: Verify frontmatter updated with `stepsCompleted: [1, 2]`, then load and execute `{nextStepFile}`
|
|
144
|
-
- **[p]**: Load and execute `{party_mode_exec}`, then return here and redisplay menu
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## REQUIRED OUTPUTS:
|
|
149
|
-
|
|
150
|
-
- MUST document technical context (stack, patterns, files identified).
|
|
151
|
-
- MUST update `{wipFile}` with functional context.
|
|
152
|
-
|
|
153
|
-
## VERIFICATION CHECKLIST:
|
|
154
|
-
|
|
155
|
-
- [ ] Technical mapping performed and documented.
|
|
156
|
-
- [ ] `stepsCompleted: [1, 2]` set in frontmatter.
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: 'step-03-generate'
|
|
3
|
-
description: 'Build the implementation plan based on the technical mapping of constraints'
|
|
4
|
-
|
|
5
|
-
workflow_path: '{project_root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec'
|
|
6
|
-
nextStepFile: './step-04-review.md'
|
|
7
|
-
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
<purpose>
|
|
11
|
-
Generate an implementation-ready plan that addresses the requirement delta using the technical context captured in Steps 1 and 2. Create specific, ordered, actionable implementation tasks and testable acceptance criteria that meet the READY FOR DEVELOPMENT standard.
|
|
12
|
-
</purpose>
|
|
13
|
-
|
|
14
|
-
<instructions>
|
|
15
|
-
Load the WIP file with all captured context, generate discrete implementation tasks with specific files and actions ordered logically, create testable acceptance criteria in Given/When/Then format covering happy path and edge cases, fill in Dependencies/Testing Strategy/Notes sections, update WIP frontmatter with stepsCompleted: [1, 2, 3] and status: 'review', and proceed to Step 4.
|
|
16
|
-
</instructions>
|
|
17
|
-
|
|
18
|
-
<output>
|
|
19
|
-
WIP file updated with implementation plan including specific ordered tasks with file paths, testable acceptance criteria in Given/When/Then format, Dependencies documented, Testing Strategy defined, and Notes section completed. Frontmatter updated with stepsCompleted: [1, 2, 3] and status: 'review'. File ready for Step 4 review.
|
|
20
|
-
</output>
|
|
21
|
-
|
|
22
|
-
# Step 3: Generate Implementation Plan
|
|
23
|
-
|
|
24
|
-
**Progress: Step 3 of 4** - Next: Review & Finalize
|
|
25
|
-
|
|
26
|
-
## RULES:
|
|
27
|
-
|
|
28
|
-
- MUST NOT skip steps.
|
|
29
|
-
- MUST NOT optimize sequence.
|
|
30
|
-
- MUST follow exact instructions.
|
|
31
|
-
- MUST NOT implement anything - just document.
|
|
32
|
-
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
33
|
-
|
|
34
|
-
## CONTEXT:
|
|
35
|
-
|
|
36
|
-
- Requires `{wipFile}` with defined "Overview" and "Context for Development" sections.
|
|
37
|
-
- Focus: Create the implementation sequence that addresses the requirement delta using the captured technical context.
|
|
38
|
-
- Output: Implementation-ready tasks with specific files and instructions.
|
|
39
|
-
- Target: Meet the **READY FOR DEVELOPMENT** standard defined in `workflow.md`.
|
|
40
|
-
|
|
41
|
-
## SEQUENCE OF INSTRUCTIONS
|
|
42
|
-
|
|
43
|
-
### 1. Load Current State
|
|
44
|
-
|
|
45
|
-
**Read `{wipFile}` completely and extract:**
|
|
46
|
-
|
|
47
|
-
- All frontmatter values
|
|
48
|
-
- Overview section (Problem, Solution, Scope)
|
|
49
|
-
- Context for Development section (Patterns, Files, Decisions)
|
|
50
|
-
|
|
51
|
-
### 2. Generate Implementation Plan
|
|
52
|
-
|
|
53
|
-
Generate specific implementation tasks:
|
|
54
|
-
|
|
55
|
-
a) **Task Breakdown**
|
|
56
|
-
|
|
57
|
-
- Each task should be a discrete, completable unit of work
|
|
58
|
-
- Tasks should be ordered logically (dependencies first)
|
|
59
|
-
- Include the specific files to modify in each task
|
|
60
|
-
- Be explicit about what changes to make
|
|
61
|
-
|
|
62
|
-
b) **Task Format**
|
|
63
|
-
|
|
64
|
-
```markdown
|
|
65
|
-
- [ ] Task N: Clear action description
|
|
66
|
-
- File: `path/to/file.ext`
|
|
67
|
-
- Action: Specific change to make
|
|
68
|
-
- Notes: Any implementation details
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### 3. Generate Acceptance Criteria
|
|
72
|
-
|
|
73
|
-
**Create testable acceptance criteria:**
|
|
74
|
-
|
|
75
|
-
Each AC should follow Given/When/Then format:
|
|
76
|
-
|
|
77
|
-
```markdown
|
|
78
|
-
- [ ] AC N: Given [precondition], when [action], then [expected result]
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Ensure ACs cover:**
|
|
82
|
-
|
|
83
|
-
- Happy path functionality
|
|
84
|
-
- Error handling
|
|
85
|
-
- Edge cases (if relevant)
|
|
86
|
-
- Integration points (if relevant)
|
|
87
|
-
|
|
88
|
-
### 4. Complete Additional Context
|
|
89
|
-
|
|
90
|
-
**Fill in remaining sections:**
|
|
91
|
-
|
|
92
|
-
a) **Dependencies**
|
|
93
|
-
|
|
94
|
-
- External libraries or services needed
|
|
95
|
-
- Other tasks or features this depends on
|
|
96
|
-
- API or data dependencies
|
|
97
|
-
|
|
98
|
-
b) **Testing Strategy**
|
|
99
|
-
|
|
100
|
-
- Unit tests needed
|
|
101
|
-
- Integration tests needed
|
|
102
|
-
- Manual testing steps
|
|
103
|
-
|
|
104
|
-
c) **Notes**
|
|
105
|
-
|
|
106
|
-
- High-risk items from pre-mortem analysis
|
|
107
|
-
- Known limitations
|
|
108
|
-
- Future considerations (out of scope but worth noting)
|
|
109
|
-
|
|
110
|
-
### 5. Write Complete Spec
|
|
111
|
-
|
|
112
|
-
a) **Update `{wipFile}` with all generated content:**
|
|
113
|
-
|
|
114
|
-
- Ensure all template sections are filled in
|
|
115
|
-
- No placeholder text remaining
|
|
116
|
-
- All frontmatter values current
|
|
117
|
-
- Update status to 'review' (NOT 'ready-for-dev' - that happens after user review in Step 4)
|
|
118
|
-
|
|
119
|
-
b) **Update frontmatter:**
|
|
120
|
-
|
|
121
|
-
```yaml
|
|
122
|
-
---
|
|
123
|
-
# ... existing values ...
|
|
124
|
-
status: 'review'
|
|
125
|
-
stepsCompleted: [1, 2, 3]
|
|
126
|
-
---
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
c) **Load and execute `{nextStepFile}` (Step 4)**
|
|
130
|
-
|
|
131
|
-
## REQUIRED OUTPUTS:
|
|
132
|
-
|
|
133
|
-
- Tasks MUST be specific, actionable, ordered logically, with files to modify.
|
|
134
|
-
- ACs MUST be testable, using Given/When/Then format.
|
|
135
|
-
- Status MUST be updated to 'review'.
|
|
136
|
-
|
|
137
|
-
## VERIFICATION CHECKLIST:
|
|
138
|
-
|
|
139
|
-
- [ ] `stepsCompleted: [1, 2, 3]` set in frontmatter.
|
|
140
|
-
- [ ] Spec meets the **READY FOR DEVELOPMENT** standard.
|