@pennyfarthing/core 10.0.3 → 10.1.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 +9 -7
- package/package.json +7 -1
- package/packages/core/dist/cli/commands/cyclist.d.ts +5 -1
- package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/cyclist.js +4 -4
- package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
- package/packages/core/dist/cli/commands/cyclist.test.js +2 -2
- package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor-legacy.test.js +17 -16
- 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 +251 -4
- package/packages/core/dist/cli/commands/doctor.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 +43 -7
- package/packages/core/dist/cli/commands/init.js.map +1 -1
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +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 +1 -1
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
- package/packages/core/dist/cli/utils/files.d.ts +10 -0
- package/packages/core/dist/cli/utils/files.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/files.js +35 -0
- package/packages/core/dist/cli/utils/files.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/scripts/generate-report.d.ts.map +1 -1
- package/packages/core/dist/scripts/generate-report.js +11 -7
- package/packages/core/dist/scripts/generate-report.js.map +1 -1
- package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -1
- package/packages/core/dist/scripts/generate-spider-report.js +12 -8
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -1
- package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
- package/packages/core/dist/scripts/generate-spider.js +6 -4
- package/packages/core/dist/scripts/generate-spider.js.map +1 -1
- package/packages/core/dist/scripts/generate-spider.test.js +2 -2
- package/packages/core/dist/scripts/generate-spider.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/orchestrator.md +0 -6
- package/pennyfarthing-dist/agents/pm.md +1 -7
- package/pennyfarthing-dist/agents/sm-finish.md +1 -1
- package/pennyfarthing-dist/agents/sm-setup.md +2 -2
- package/pennyfarthing-dist/agents/sm.md +4 -11
- 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/repo-status.md +2 -2
- 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 +1 -1
- package/pennyfarthing-dist/commands/show-theme.md +14 -16
- package/pennyfarthing-dist/commands/sm.md +11 -3
- package/pennyfarthing-dist/commands/sprint.md +8 -8
- 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-coordination.md +11 -13
- package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
- 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/skill-schema.md +25 -26
- package/pennyfarthing-dist/guides/xml-tags.md +2 -2
- package/pennyfarthing-dist/scripts/README.md +2 -2
- package/pennyfarthing-dist/scripts/core/agent-session.sh +6 -2
- package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +1 -1
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +14 -12
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +1 -1
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +3 -3
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
- package/pennyfarthing-dist/scripts/sprint/README.md +32 -17
- package/pennyfarthing-dist/scripts/story/README.md +1 -1
- package/pennyfarthing-dist/scripts/test/test-setup.sh +1 -1
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
- package/pennyfarthing-dist/scripts/theme/README.md +1 -1
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +62 -17
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
- package/pennyfarthing-dist/skills/skill-registry.yaml +41 -28
- package/pennyfarthing-dist/skills/sprint/skill.md +386 -68
- package/pennyfarthing-dist/skills/story/skill.md +14 -206
- package/pennyfarthing-dist/skills/theme/skill.md +290 -75
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
- package/pennyfarthing-dist/skills/workflow/skill.md +4 -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/epics-and-stories/steps/step-05-import-to-future.md +42 -25
- package/pennyfarthing-dist/workflows/git-cleanup.yaml +1 -1
- package/pennyfarthing-dist/workflows/project-setup/steps/step-10-complete.md +1 -1
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.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/cli.py +15 -0
- package/pennyfarthing_scripts/codemarkers/__init__.py +19 -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 +326 -0
- package/pennyfarthing_scripts/codemarkers/cli.py +129 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +89 -0
- package/pennyfarthing_scripts/codemarkers/models.py +45 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/config.py +2 -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 +78 -0
- package/pennyfarthing_scripts/complexity/formatters.py +64 -0
- package/pennyfarthing_scripts/complexity/models.py +32 -0
- 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 +323 -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 +72 -0
- package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
- package/pennyfarthing_scripts/dependencies/models.py +39 -0
- package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
- package/pennyfarthing_scripts/healthscore/__main__.py +6 -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 +161 -0
- package/pennyfarthing_scripts/healthscore/cli.py +76 -0
- package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
- package/pennyfarthing_scripts/healthscore/models.py +44 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/analyze.py +28 -1
- package/pennyfarthing_scripts/hotspots/cli.py +11 -9
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.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__/operations.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/bidirectional.py +42 -15
- package/pennyfarthing_scripts/jira/cli.py +78 -1
- package/pennyfarthing_scripts/jira/client.py +28 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.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__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/workflow.py +5 -3
- 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__/loader.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 +63 -6
- package/pennyfarthing_scripts/sprint/archive_epic.py +198 -85
- package/pennyfarthing_scripts/sprint/cli.py +1565 -65
- package/pennyfarthing_scripts/sprint/epic_add.py +173 -0
- package/pennyfarthing_scripts/sprint/loader.py +46 -2
- package/pennyfarthing_scripts/sprint/story_add.py +202 -27
- package/pennyfarthing_scripts/sprint/story_finish.py +211 -0
- package/pennyfarthing_scripts/sprint/validate_cmd.py +44 -5
- package/pennyfarthing_scripts/sprint/validator.py +13 -3
- package/pennyfarthing_scripts/sprint/work.py +43 -3
- package/pennyfarthing_scripts/sprint/yaml_io.py +124 -15
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.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_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_update.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_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/test_codemarkers.py +682 -0
- package/pennyfarthing_scripts/tests/test_healthscore.py +524 -0
- package/pennyfarthing_scripts/tests/test_sprint_package.py +166 -0
- package/pennyfarthing_scripts/tests/test_yaml_io.py +117 -0
- 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 +286 -0
- package/scripts/README.md +53 -0
- package/scripts/postinstall.cjs +34 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
- package/pennyfarthing-dist/scripts/sprint/archive-story.sh +0 -133
- package/pennyfarthing-dist/scripts/sprint/available-stories.sh +0 -91
- package/pennyfarthing-dist/scripts/sprint/check-story.sh +0 -158
- package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +0 -52
- package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +0 -63
- package/pennyfarthing-dist/scripts/sprint/list-future.sh +0 -145
- package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +0 -110
- package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +0 -148
- package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +0 -415
- package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +0 -33
- package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +0 -230
- package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +0 -134
- package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +0 -139
- package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +0 -101
- package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +0 -97
- package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +0 -164
- package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +0 -23
- package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +0 -116
- package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +0 -164
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +0 -39
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +0 -147
- package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +0 -23
|
@@ -1,178 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: theme-creation
|
|
3
|
-
description:
|
|
3
|
+
description: |
|
|
4
|
+
DEPRECATED: Use /theme maker instead.
|
|
5
|
+
Theme creation has been consolidated under /theme.
|
|
6
|
+
deprecated: true
|
|
7
|
+
redirect: theme
|
|
4
8
|
---
|
|
5
9
|
|
|
6
|
-
#
|
|
10
|
+
# /theme-creation - DEPRECATED
|
|
7
11
|
|
|
8
|
-
<run
|
|
12
|
+
<run>
|
|
13
|
+
This skill is deprecated. Use `/theme maker` instead.
|
|
14
|
+
</run>
|
|
9
15
|
|
|
10
|
-
<output>
|
|
16
|
+
<output>
|
|
17
|
+
Redirects to the consolidated `/theme` skill.
|
|
18
|
+
</output>
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
Theme creation has been consolidated into the `/theme` skill. Use:
|
|
13
21
|
|
|
14
|
-
|
|
22
|
+
| Old Command | New Command |
|
|
23
|
+
|-------------|-------------|
|
|
24
|
+
| `/theme-maker` | `/theme maker` |
|
|
25
|
+
| `/create-theme <name>` | `/theme create <name>` |
|
|
15
26
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
**Invoke `/theme-maker` when the user:**
|
|
19
|
-
- Asks to "create a theme" or "make a theme"
|
|
20
|
-
- Wants "AI-driven theme generation"
|
|
21
|
-
- Says "generate personas" or "generate characters"
|
|
22
|
-
- Mentions a fictional universe and wants agents based on it
|
|
23
|
-
- Asks for "custom personas" or "themed agents"
|
|
24
|
-
- Wants to "customize agent characters"
|
|
25
|
-
- Mentions any fictional universe + "theme" (e.g., "Star Wars theme", "pirates theme")
|
|
26
|
-
|
|
27
|
-
**Trigger phrases:**
|
|
28
|
-
- "create a [X] theme"
|
|
29
|
-
- "make a theme based on [X]"
|
|
30
|
-
- "generate [X] personas"
|
|
31
|
-
- "I want [X] themed agents"
|
|
32
|
-
- "AI-driven theme generation"
|
|
33
|
-
- "custom theme for [universe]"
|
|
34
|
-
|
|
35
|
-
## Available Commands
|
|
27
|
+
The `/theme` skill now handles all theme operations:
|
|
36
28
|
|
|
37
29
|
| Command | Purpose |
|
|
38
30
|
|---------|---------|
|
|
39
|
-
| `/theme
|
|
40
|
-
| `/
|
|
41
|
-
| `/
|
|
42
|
-
| `/
|
|
43
|
-
| `/
|
|
44
|
-
|
|
45
|
-
## Theme Creation Modes
|
|
46
|
-
|
|
47
|
-
### AI-Driven Mode (Recommended)
|
|
48
|
-
|
|
49
|
-
Best for: Users who describe a concept and want the AI to generate everything.
|
|
50
|
-
|
|
51
|
-
**Flow:**
|
|
52
|
-
1. User provides universe/concept (e.g., "Gilligan's Island, humorous")
|
|
53
|
-
2. AI generates all 10 agent personas automatically
|
|
54
|
-
3. User previews and confirms or regenerates
|
|
55
|
-
4. Theme file written to `.claude/pennyfarthing/themes/`
|
|
56
|
-
|
|
57
|
-
**What gets generated:**
|
|
58
|
-
- Character names fitting the universe
|
|
59
|
-
- OCEAN personality profiles (O/C/E/A/N scores 1-5)
|
|
60
|
-
- Communication styles
|
|
61
|
-
- Signature quotes
|
|
62
|
-
- Emojis and visual descriptions
|
|
63
|
-
- Helper assistants for each agent
|
|
64
|
-
|
|
65
|
-
### Guided Mode
|
|
66
|
-
|
|
67
|
-
Best for: Users who want to pick characters from suggestions.
|
|
68
|
-
|
|
69
|
-
**Flow:**
|
|
70
|
-
1. User provides universe/concept
|
|
71
|
-
2. AI suggests 3-4 character options per agent
|
|
72
|
-
3. User picks (or enters custom) for each
|
|
73
|
-
4. AI fills in remaining details (style, quote, OCEAN)
|
|
74
|
-
|
|
75
|
-
### Manual Mode
|
|
76
|
-
|
|
77
|
-
Best for: Users who know exactly what they want.
|
|
78
|
-
|
|
79
|
-
**Flow:**
|
|
80
|
-
1. User provides theme description
|
|
81
|
-
2. User enters character, style, quote for each agent
|
|
82
|
-
3. Optional: Specify OCEAN scores or let AI generate
|
|
83
|
-
4. Theme file created with user's exact specifications
|
|
84
|
-
|
|
85
|
-
## Agent Roles Reference
|
|
86
|
-
|
|
87
|
-
When generating or suggesting characters, match to these roles:
|
|
88
|
-
|
|
89
|
-
| Agent | Role | Character Should Be |
|
|
90
|
-
|-------|------|---------------------|
|
|
91
|
-
| orchestrator | Meta-coordinator | Pattern-seer, guide, overseer |
|
|
92
|
-
| sm | Scrum Master | Leader, coordinator, keeps team together |
|
|
93
|
-
| tea | Test Engineer | Analyst, detail-oriented, finds flaws |
|
|
94
|
-
| dev | Developer | Builder, practical, gets things done |
|
|
95
|
-
| reviewer | Code Reviewer | Critical, honest, high standards |
|
|
96
|
-
| architect | System Architect | Big-picture thinker, systems designer |
|
|
97
|
-
| pm | Product Manager | Strategic, stakeholder manager |
|
|
98
|
-
| tech-writer | Documentation | Clear communicator, precise |
|
|
99
|
-
| ux-designer | UX Design | User advocate, feels the experience |
|
|
100
|
-
| devops | Infrastructure | Reliable, keeps systems running |
|
|
101
|
-
|
|
102
|
-
## Theme File Location
|
|
103
|
-
|
|
104
|
-
- **User themes:** `.claude/pennyfarthing/themes/{name}.yaml`
|
|
105
|
-
- **Built-in themes:** `pennyfarthing-dist/personas/themes/`
|
|
106
|
-
|
|
107
|
-
## OCEAN Personality Profiles
|
|
108
|
-
|
|
109
|
-
Each agent gets an OCEAN profile (Big Five personality traits):
|
|
110
|
-
|
|
111
|
-
| Dimension | Low (1-2) | High (4-5) |
|
|
112
|
-
|-----------|-----------|------------|
|
|
113
|
-
| **O**penness | Traditional, practical | Creative, curious |
|
|
114
|
-
| **C**onscientiousness | Flexible, spontaneous | Organized, disciplined |
|
|
115
|
-
| **E**xtraversion | Reserved, reflective | Outgoing, energetic |
|
|
116
|
-
| **A**greeableness | Competitive, skeptical | Cooperative, trusting |
|
|
117
|
-
| **N**euroticism | Calm, stable | Emotional, reactive |
|
|
118
|
-
|
|
119
|
-
## Examples
|
|
120
|
-
|
|
121
|
-
### Example 1: AI-Driven Theme Creation
|
|
122
|
-
|
|
123
|
-
**User:** "Create a Gilligan's Island theme, make it humorous"
|
|
124
|
-
|
|
125
|
-
**Action:** Invoke `/theme-maker`, select AI-Driven mode, generate 10 agents based on the show's characters.
|
|
126
|
-
|
|
127
|
-
### Example 2: Quick Theme from Base
|
|
128
|
-
|
|
129
|
-
**User:** "Create a theme called my-team based on discworld"
|
|
130
|
-
|
|
131
|
-
**Action:** Run `/create-theme my-team --base discworld`
|
|
132
|
-
|
|
133
|
-
### Example 3: List and Switch Themes
|
|
134
|
-
|
|
135
|
-
**User:** "What themes are available? Switch to star-trek."
|
|
136
|
-
|
|
137
|
-
**Action:** Run `/list-themes`, then `/set-theme star-trek`
|
|
138
|
-
|
|
139
|
-
## Validation Rules for Theme Names
|
|
140
|
-
|
|
141
|
-
- Lowercase letters only
|
|
142
|
-
- Must start with a letter
|
|
143
|
-
- Hyphens allowed (no underscores or spaces)
|
|
144
|
-
- No conflicts with existing themes
|
|
145
|
-
|
|
146
|
-
## Portrait Generation
|
|
147
|
-
|
|
148
|
-
Each agent can have a `visual` field that describes their appearance for portrait generation.
|
|
149
|
-
|
|
150
|
-
**Generate all portraits for a theme:**
|
|
151
|
-
```bash
|
|
152
|
-
./scripts/generate-portraits.sh --theme {name}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**Generate a single agent's portrait:**
|
|
156
|
-
```bash
|
|
157
|
-
./scripts/generate-portraits.sh --theme {name} --role {role}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
**Dry run (preview):**
|
|
161
|
-
```bash
|
|
162
|
-
./scripts/generate-portraits.sh --theme {name} --dry-run
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
**Requirements:**
|
|
166
|
-
- Python 3 venv at `.venv/` with: `pip install diffusers transformers accelerate torch pillow pyyaml tqdm`
|
|
167
|
-
- Apple Silicon Mac (MPS) or NVIDIA GPU (CUDA)
|
|
168
|
-
- ~6.5GB model download on first run
|
|
169
|
-
|
|
170
|
-
**Output:** `pennyfarthing-dist/personas/portraits/{theme}/{shortName}-{OCEAN}.png`
|
|
171
|
-
|
|
172
|
-
## Post-Creation Steps
|
|
173
|
-
|
|
174
|
-
After creating a theme:
|
|
175
|
-
1. Theme file at `.claude/pennyfarthing/themes/{name}.yaml`
|
|
176
|
-
2. Activate with `/set-theme {name}`
|
|
177
|
-
3. Generate portraits with `./scripts/generate-portraits.sh --theme {name}`
|
|
178
|
-
4. Edit YAML directly for fine-tuning
|
|
31
|
+
| `/theme list` | List available themes |
|
|
32
|
+
| `/theme show [name]` | Show theme details |
|
|
33
|
+
| `/theme set <name>` | Set active theme |
|
|
34
|
+
| `/theme create <name>` | Create from base theme |
|
|
35
|
+
| `/theme maker` | Interactive AI-driven wizard |
|
|
@@ -257,7 +257,7 @@ Fix session file when handoffs didn't update phase tracking properly. This corre
|
|
|
257
257
|
|
|
258
258
|
**When to use:**
|
|
259
259
|
- SM detects wrong phase after handoff
|
|
260
|
-
-
|
|
260
|
+
- Prime activation output shows stale state
|
|
261
261
|
- Phase History table is incomplete
|
|
262
262
|
|
|
263
263
|
**Run:**
|
|
@@ -340,6 +340,6 @@ workflow:
|
|
|
340
340
|
|
|
341
341
|
For comprehensive documentation on creating stepped workflows, see:
|
|
342
342
|
|
|
343
|
-
- **[
|
|
344
|
-
- **[docs/adr/
|
|
345
|
-
- **[pennyfarthing-dist/workflows/architecture.yaml](
|
|
343
|
+
- **[guides/bikelane.md](../../guides/bikelane.md)** - Full BikeLane user guide
|
|
344
|
+
- **[docs/adr/0013-bmad-workflow-import.md](../../docs/adr/0013-bmad-workflow-import.md)** - Technical ADR
|
|
345
|
+
- **[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
|