@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
|
@@ -52,8 +52,8 @@ Prime selects a context tier based on session state to manage token overhead:
|
|
|
52
52
|
## Invocation
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
# From agent commands (via CLI)
|
|
56
|
-
|
|
55
|
+
# From agent commands (via pf CLI)
|
|
56
|
+
pf agent start "<agent>" --quiet
|
|
57
57
|
|
|
58
58
|
# TypeScript API (from Cyclist)
|
|
59
59
|
getPrimeContext(agentName, projectDir)
|
|
@@ -146,7 +146,7 @@ args: "[arg1|arg2]" # Optional: argument summary
|
|
|
146
146
|
**Example:**
|
|
147
147
|
```xml
|
|
148
148
|
<run>
|
|
149
|
-
|
|
149
|
+
pf sprint status [filter]
|
|
150
150
|
</run>
|
|
151
151
|
```
|
|
152
152
|
|
|
@@ -195,7 +195,7 @@ args: "[arg1|arg2]" # Optional: argument summary
|
|
|
195
195
|
**Example:**
|
|
196
196
|
```xml
|
|
197
197
|
<example>
|
|
198
|
-
|
|
198
|
+
pf sprint check MSSCI-12038
|
|
199
199
|
# Returns: {"type": "story", "available": true, "title": "...", ...}
|
|
200
200
|
</example>
|
|
201
201
|
```
|
|
@@ -272,68 +272,67 @@ Here's a well-structured skill file following the schema:
|
|
|
272
272
|
|
|
273
273
|
```markdown
|
|
274
274
|
---
|
|
275
|
-
name:
|
|
275
|
+
name: sprint
|
|
276
276
|
description: |
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
args: "[
|
|
277
|
+
Sprint status, backlog, story, and epic management. Use when checking sprint
|
|
278
|
+
status, managing stories, or working with epics.
|
|
279
|
+
args: "[status|backlog|work|story|epic|standalone]"
|
|
280
280
|
---
|
|
281
281
|
|
|
282
|
-
# /
|
|
282
|
+
# /sprint - Sprint Management
|
|
283
283
|
|
|
284
284
|
<critical>
|
|
285
|
-
|
|
286
|
-
**Never** create stories outside of sprint context.
|
|
285
|
+
Never manually edit sprint YAML. Use the provided commands.
|
|
287
286
|
</critical>
|
|
288
287
|
|
|
289
288
|
## Commands
|
|
290
289
|
|
|
291
|
-
### `/story
|
|
290
|
+
### `/sprint story add <epic-id> "<title>" <points>`
|
|
292
291
|
|
|
293
|
-
|
|
292
|
+
Add a new story to an epic.
|
|
294
293
|
|
|
295
294
|
<run>
|
|
296
|
-
|
|
295
|
+
pf sprint story add <epic-id> "<title>" <points>
|
|
297
296
|
</run>
|
|
298
297
|
|
|
299
298
|
<args>
|
|
300
299
|
| Arg | Required | Description |
|
|
301
300
|
|-----|----------|-------------|
|
|
301
|
+
| `epic-id` | Yes | Parent epic (e.g., `epic-76`) |
|
|
302
302
|
| `title` | Yes | Story title (quoted if contains spaces) |
|
|
303
|
+
| `points` | Yes | Story points |
|
|
303
304
|
</args>
|
|
304
305
|
|
|
305
306
|
<example>
|
|
306
|
-
|
|
307
|
-
# Returns: {"id": "36-5", "title": "Add user authentication", "status": "backlog"}
|
|
307
|
+
pf sprint story add epic-76 "Add user authentication" 3
|
|
308
308
|
</example>
|
|
309
309
|
|
|
310
310
|
<output>
|
|
311
|
-
|
|
312
|
-
Story is created in backlog status within the active epic.
|
|
311
|
+
Confirmation with new story ID and details.
|
|
313
312
|
</output>
|
|
314
313
|
|
|
315
314
|
<when>
|
|
316
|
-
After creating, use `/story size
|
|
315
|
+
After creating, use `/sprint story size` for sizing guidelines.
|
|
317
316
|
</when>
|
|
318
317
|
|
|
319
318
|
---
|
|
320
319
|
|
|
321
|
-
### `/story finish <story-id>`
|
|
320
|
+
### `/sprint story finish <story-id>`
|
|
322
321
|
|
|
323
322
|
Complete a story after PR merge.
|
|
324
323
|
|
|
325
324
|
<run>
|
|
326
|
-
|
|
325
|
+
pf sprint story finish <story-id>
|
|
327
326
|
</run>
|
|
328
327
|
|
|
329
328
|
<args>
|
|
330
329
|
| Arg | Required | Description |
|
|
331
330
|
|-----|----------|-------------|
|
|
332
|
-
| `story-id` | Yes | Story to finish (e.g., `
|
|
331
|
+
| `story-id` | Yes | Story to finish (e.g., `MSSCI-12052`) |
|
|
333
332
|
</args>
|
|
334
333
|
|
|
335
334
|
<example>
|
|
336
|
-
|
|
335
|
+
pf sprint story finish MSSCI-12052
|
|
337
336
|
# Archives story, updates Jira, cleans session files
|
|
338
337
|
</example>
|
|
339
338
|
|
|
@@ -358,11 +357,11 @@ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$
|
|
|
358
357
|
|
|
359
358
|
## Quick Reference
|
|
360
359
|
|
|
361
|
-
| Command | Script |
|
|
362
|
-
|
|
363
|
-
| `/story
|
|
364
|
-
| `/story size
|
|
365
|
-
| `/story finish <id>` | `finish
|
|
360
|
+
| Command | Script/CLI |
|
|
361
|
+
|---------|------------|
|
|
362
|
+
| `/sprint story add ...` | `sprint story add` |
|
|
363
|
+
| `/sprint story size` | `sprint story size` |
|
|
364
|
+
| `/sprint story finish <id>` | `sprint story finish` |
|
|
366
365
|
|
|
367
366
|
## Related Skills
|
|
368
367
|
|
|
@@ -447,7 +447,7 @@ Tags used in skill files (`skills/{name}/SKILL.md`) for command documentation.
|
|
|
447
447
|
|
|
448
448
|
```markdown
|
|
449
449
|
<run>
|
|
450
|
-
|
|
450
|
+
pf sprint status [filter]
|
|
451
451
|
</run>
|
|
452
452
|
```
|
|
453
453
|
|
|
@@ -473,7 +473,7 @@ Tags used in skill files (`skills/{name}/SKILL.md`) for command documentation.
|
|
|
473
473
|
|
|
474
474
|
```markdown
|
|
475
475
|
<example>
|
|
476
|
-
|
|
476
|
+
pf sprint check MSSCI-12038
|
|
477
477
|
# Returns: {"type": "story", "available": true}
|
|
478
478
|
</example>
|
|
479
479
|
```
|
|
@@ -8,7 +8,7 @@ Scripts are organized into categorical subdirectories. **Full paths are required
|
|
|
8
8
|
scripts/
|
|
9
9
|
├── core/ # Essential scripts (agent-session.sh)
|
|
10
10
|
├── workflow/ # Workflow mechanics (finish-story.sh, check.sh)
|
|
11
|
-
├── sprint/ # Sprint YAML operations (sprint
|
|
11
|
+
├── sprint/ # Sprint YAML operations (migrated to pf sprint CLI)
|
|
12
12
|
├── story/ # Story operations (create-story.sh)
|
|
13
13
|
├── jira/ # Jira integration (jira-claim-story.sh)
|
|
14
14
|
├── git/ # Git operations (release.sh, worktree-manager.sh)
|
|
@@ -27,7 +27,7 @@ Scripts are invoked directly with **full category paths**:
|
|
|
27
27
|
```bash
|
|
28
28
|
# From project root
|
|
29
29
|
.pennyfarthing/scripts/core/agent-session.sh start sm
|
|
30
|
-
|
|
30
|
+
pf sprint status
|
|
31
31
|
.pennyfarthing/scripts/jira/jira-claim-story.sh MSSCI-12345
|
|
32
32
|
.pennyfarthing/scripts/workflow/finish-story.sh MSSCI-12345
|
|
33
33
|
```
|
|
@@ -91,7 +91,7 @@ check_theme_version() {
|
|
|
91
91
|
echo "" >&2
|
|
92
92
|
echo "Warning: Theme '${theme_name}' was created with Pennyfarthing ${theme_version}" >&2
|
|
93
93
|
echo " Current version: ${current_version} - agent roles may have changed." >&2
|
|
94
|
-
echo " Run '/theme
|
|
94
|
+
echo " Run '/theme maker' to review and update." >&2
|
|
95
95
|
echo "" >&2
|
|
96
96
|
fi
|
|
97
97
|
|
|
@@ -232,7 +232,11 @@ case "$1" in
|
|
|
232
232
|
PRIME_ARGS+=(--no-persona)
|
|
233
233
|
fi
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
if command -v pf &>/dev/null; then
|
|
236
|
+
pf prime "${PRIME_ARGS[@]}"
|
|
237
|
+
else
|
|
238
|
+
python3 -m pennyfarthing_scripts.prime "${PRIME_ARGS[@]}"
|
|
239
|
+
fi
|
|
236
240
|
;;
|
|
237
241
|
stop)
|
|
238
242
|
# Use provided session ID, fall back to SESSION_ID env var
|
|
@@ -2,29 +2,27 @@
|
|
|
2
2
|
# prime.sh - Load essential project context at agent activation
|
|
3
3
|
# Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]
|
|
4
4
|
#
|
|
5
|
-
#
|
|
5
|
+
# Uses the `pf` CLI (installed via uv/pipx during pennyfarthing init).
|
|
6
|
+
# Falls back to python3 -m with PYTHONPATH if pf is not available.
|
|
6
7
|
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
# Prefer pf CLI if available
|
|
9
|
+
if command -v pf &>/dev/null; then
|
|
10
|
+
exec pf prime "$@"
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Fallback: find pennyfarthing_scripts via PYTHONPATH
|
|
10
14
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
11
15
|
PACKAGE_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
|
|
12
16
|
|
|
13
|
-
# Fallback: if pennyfarthing_scripts not found at expected location,
|
|
14
|
-
# look in node_modules (handles edge cases like stale copies)
|
|
15
17
|
if [[ ! -d "$PACKAGE_ROOT/pennyfarthing_scripts" ]]; then
|
|
16
|
-
# Find project root by looking for .pennyfarthing marker
|
|
17
18
|
PROJECT_ROOT="$PWD"
|
|
18
19
|
while [[ ! -d "$PROJECT_ROOT/.pennyfarthing" ]] && [[ "$PROJECT_ROOT" != "/" ]]; do
|
|
19
20
|
PROJECT_ROOT="$(dirname "$PROJECT_ROOT")"
|
|
20
21
|
done
|
|
21
|
-
# Try node_modules location
|
|
22
22
|
if [[ -d "$PROJECT_ROOT/node_modules/@pennyfarthing/core/pennyfarthing_scripts" ]]; then
|
|
23
23
|
PACKAGE_ROOT="$PROJECT_ROOT/node_modules/@pennyfarthing/core"
|
|
24
24
|
fi
|
|
25
25
|
fi
|
|
26
26
|
|
|
27
|
-
# Set PYTHONPATH so Python can find pennyfarthing_scripts
|
|
28
27
|
export PYTHONPATH="${PACKAGE_ROOT}:${PYTHONPATH:-}"
|
|
29
|
-
|
|
30
28
|
exec python3 -m pennyfarthing_scripts.prime "$@"
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# install-git-hooks.sh - Install Pennyfarthing git hooks for
|
|
2
|
+
# install-git-hooks.sh - Install Pennyfarthing git hooks for framework development
|
|
3
3
|
#
|
|
4
4
|
# Usage: ./pennyfarthing-dist/scripts/install-git-hooks.sh
|
|
5
5
|
#
|
|
6
|
-
# For
|
|
7
|
-
#
|
|
6
|
+
# For the pennyfarthing framework repo and orchestrator repos that inline it.
|
|
7
|
+
# End-user projects use `pennyfarthing init` which copies hooks from node_modules.
|
|
8
|
+
# This script creates symlinks so hook changes in pennyfarthing-dist/ take effect immediately.
|
|
8
9
|
|
|
9
10
|
set -euo pipefail
|
|
10
11
|
|
|
@@ -14,10 +15,11 @@ source "$SCRIPT_DIR/../lib/find-root.sh"
|
|
|
14
15
|
HOOKS_SOURCE="$PROJECT_ROOT/pennyfarthing-dist/scripts/hooks"
|
|
15
16
|
HOOKS_DEST="$PROJECT_ROOT/.git/hooks"
|
|
16
17
|
|
|
17
|
-
# Check we're in
|
|
18
|
+
# Check we're in a repo with pennyfarthing-dist (framework or orchestrator)
|
|
18
19
|
if [[ ! -d "$PROJECT_ROOT/pennyfarthing-dist" ]]; then
|
|
19
|
-
echo "Error: This script
|
|
20
|
-
echo "
|
|
20
|
+
echo "Error: This script requires pennyfarthing-dist/ at the project root"
|
|
21
|
+
echo " (framework repo or orchestrator with inlined pennyfarthing/)"
|
|
22
|
+
echo " End-user projects should use: pennyfarthing init"
|
|
21
23
|
exit 1
|
|
22
24
|
fi
|
|
23
25
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Usage: worktree-manager.sh {create|remove|list|status|ports|cd} [args]
|
|
4
4
|
#
|
|
5
5
|
# Configuration (choose one):
|
|
6
|
-
# 1. repos.yaml: Define repos in .
|
|
6
|
+
# 1. repos.yaml: Define repos in .pennyfarthing/repos.yaml (recommended)
|
|
7
7
|
# 2. Legacy env vars: Set API_REPO and UI_REPO in .claude/project/hooks/setup-env.sh
|
|
8
8
|
|
|
9
9
|
set -e
|
|
@@ -109,7 +109,7 @@ load_repos_config
|
|
|
109
109
|
if [ "$(get_repo_count)" -eq 0 ]; then
|
|
110
110
|
echo "❌ Error: No repositories configured"
|
|
111
111
|
echo ""
|
|
112
|
-
echo "Option 1: Create .
|
|
112
|
+
echo "Option 1: Create .pennyfarthing/repos.yaml (recommended for multi-repo projects)"
|
|
113
113
|
echo "Option 2: Set API_REPO and UI_REPO in .claude/project/hooks/setup-env.sh"
|
|
114
114
|
exit 1
|
|
115
115
|
fi
|
|
@@ -161,7 +161,7 @@ Repos Filter (third argument):
|
|
|
161
161
|
repo1,repo2 - Comma-separated list of specific repo names
|
|
162
162
|
|
|
163
163
|
Configuration:
|
|
164
|
-
Option 1 (recommended): Create .
|
|
164
|
+
Option 1 (recommended): Create .pennyfarthing/repos.yaml
|
|
165
165
|
Option 2 (legacy): Set API_REPO and UI_REPO environment variables
|
|
166
166
|
|
|
167
167
|
Session Files:
|
|
@@ -6,28 +6,30 @@
|
|
|
6
6
|
# story branch is merged and automatically updating the sprint YAML status.
|
|
7
7
|
#
|
|
8
8
|
# Installation:
|
|
9
|
-
#
|
|
9
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
10
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
10
11
|
#
|
|
11
12
|
# Dependencies:
|
|
12
13
|
# - yq (for YAML manipulation)
|
|
13
|
-
#
|
|
14
|
+
# (sprint-common.sh removed — all functions defined locally)
|
|
14
15
|
|
|
15
16
|
set -uo pipefail
|
|
16
17
|
|
|
17
|
-
#
|
|
18
|
+
# Find project root
|
|
19
|
+
# Try find-root.sh via symlink resolution first, then fall back to .git location
|
|
18
20
|
REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
|
|
22
|
+
if [[ -f "$FIND_ROOT" ]]; then
|
|
23
|
+
source "$FIND_ROOT"
|
|
24
|
+
else
|
|
25
|
+
# Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
|
|
26
|
+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
|
|
27
|
+
export PROJECT_ROOT
|
|
28
|
+
fi
|
|
22
29
|
SESSION_DIR="$PROJECT_ROOT/.session"
|
|
23
30
|
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
24
31
|
|
|
25
|
-
#
|
|
26
|
-
SPRINT_COMMON="$PROJECT_ROOT/.pennyfarthing/scripts/sprint/sprint-common.sh"
|
|
27
|
-
if [[ -f "$SPRINT_COMMON" ]]; then
|
|
28
|
-
# shellcheck source=/dev/null
|
|
29
|
-
source "$SPRINT_COMMON"
|
|
30
|
-
fi
|
|
32
|
+
# Note: sprint-common.sh removed — all needed functions are defined locally below
|
|
31
33
|
|
|
32
34
|
# extract_story_id BRANCH_NAME
|
|
33
35
|
# Extract story ID from branch name pattern feat/X-Y-*
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
# 3. Validates sprint YAML files when sprint/*.yaml is modified
|
|
9
9
|
#
|
|
10
10
|
# Installation:
|
|
11
|
-
#
|
|
12
|
-
#
|
|
11
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
12
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
13
13
|
|
|
14
14
|
set -uo pipefail
|
|
15
15
|
|
|
@@ -114,7 +114,8 @@ fi
|
|
|
114
114
|
|
|
115
115
|
SPRINT_YAML_FILES=$(git diff --cached --name-only -- 'sprint/*.yaml' 'sprint/archive/*.yaml' 2>/dev/null \
|
|
116
116
|
| grep -v 'sprint-template\.yaml$' \
|
|
117
|
-
| grep -v 'sprint/completed\.yaml$'
|
|
117
|
+
| grep -v 'sprint/completed\.yaml$' \
|
|
118
|
+
| grep -v 'sprint/context/archived/' || true)
|
|
118
119
|
|
|
119
120
|
if [[ -n "$SPRINT_YAML_FILES" ]]; then
|
|
120
121
|
echo "Sprint YAML files staged for commit:"
|
|
@@ -4,15 +4,21 @@
|
|
|
4
4
|
# Checks if sprint files were modified and reminds to sync to Jira.
|
|
5
5
|
#
|
|
6
6
|
# Installation:
|
|
7
|
-
#
|
|
8
|
-
#
|
|
7
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
8
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
9
9
|
|
|
10
10
|
set -uo pipefail
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# Find project root
|
|
13
|
+
# Try find-root.sh via symlink resolution first, then fall back to .git location
|
|
13
14
|
REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
|
|
16
|
+
if [[ -f "$FIND_ROOT" ]]; then
|
|
17
|
+
source "$FIND_ROOT"
|
|
18
|
+
else
|
|
19
|
+
# Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
|
|
20
|
+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
|
|
21
|
+
export PROJECT_ROOT
|
|
16
22
|
fi
|
|
17
23
|
|
|
18
24
|
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
@@ -7,7 +7,7 @@ Uncategorized utilities and one-off scripts.
|
|
|
7
7
|
| Script | Purpose |
|
|
8
8
|
|--------|---------|
|
|
9
9
|
| `deploy.sh` | Deployment script |
|
|
10
|
-
| `doctor-dogfood.sh` | Health check for
|
|
10
|
+
| `doctor-dogfood.sh` | Health check for framework/orchestrator development setup |
|
|
11
11
|
| `run-ci.sh` | Run CI locally |
|
|
12
12
|
| `statusline.sh` | Status line configuration |
|
|
13
13
|
| `uninstall.sh` | Uninstall Pennyfarthing from project |
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
#
|
|
5
5
|
# Usage: source scripts/repo-utils.sh
|
|
6
6
|
#
|
|
7
|
-
# If .
|
|
7
|
+
# If .pennyfarthing/repos.yaml exists, uses that configuration.
|
|
8
8
|
# Otherwise, falls back to legacy $API_REPO/$UI_REPO environment variables.
|
|
9
9
|
#
|
|
10
10
|
# Core Functions:
|
|
@@ -28,7 +28,7 @@ set -euo pipefail
|
|
|
28
28
|
|
|
29
29
|
# Determine PROJECT_ROOT if not set
|
|
30
30
|
PROJECT_ROOT="${PROJECT_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
31
|
-
REPOS_CONFIG="${PROJECT_ROOT}/.
|
|
31
|
+
REPOS_CONFIG="${PROJECT_ROOT}/.pennyfarthing/repos.yaml"
|
|
32
32
|
|
|
33
33
|
# Cache for parsed config (associative arrays)
|
|
34
34
|
declare -A _REPO_PATHS 2>/dev/null || true
|
|
@@ -136,7 +136,7 @@ import json
|
|
|
136
136
|
import sys
|
|
137
137
|
import os
|
|
138
138
|
|
|
139
|
-
config_path = os.environ.get('REPOS_CONFIG', '.
|
|
139
|
+
config_path = os.environ.get('REPOS_CONFIG', '.pennyfarthing/repos.yaml')
|
|
140
140
|
try:
|
|
141
141
|
with open(config_path) as f:
|
|
142
142
|
config = yaml.safe_load(f)
|
|
@@ -31,9 +31,8 @@ NC='\033[0m' # No Color
|
|
|
31
31
|
# Required fields in frontmatter
|
|
32
32
|
REQUIRED_FIELDS=("name" "description" "tools" "model")
|
|
33
33
|
|
|
34
|
-
# Expected subagent files (
|
|
34
|
+
# Expected subagent files (7 total - consolidated in Story 31-11/31-12)
|
|
35
35
|
EXPECTED_SUBAGENTS=(
|
|
36
|
-
"workflow-status-check.md"
|
|
37
36
|
"sm-setup.md"
|
|
38
37
|
"sm-finish.md"
|
|
39
38
|
"sm-file-summary.md"
|
|
@@ -1,29 +1,44 @@
|
|
|
1
1
|
# Sprint Scripts
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
| `sprint
|
|
10
|
-
| `sprint
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `check
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `sprint
|
|
17
|
-
| `sprint
|
|
3
|
+
Sprint management is handled by the Python CLI: `pf sprint [COMMAND]`.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Purpose |
|
|
8
|
+
|---------|---------|
|
|
9
|
+
| `pf sprint status` | Show current sprint status and metrics |
|
|
10
|
+
| `pf sprint backlog` | List available stories grouped by epic |
|
|
11
|
+
| `pf sprint info` | Sprint info as JSON (for Cyclist sidebar) |
|
|
12
|
+
| `pf sprint metrics` | Sprint velocity and progress metrics |
|
|
13
|
+
| `pf sprint check <id>` | Check story/epic availability (JSON) |
|
|
14
|
+
| `pf sprint future` | Show future initiatives and epics |
|
|
15
|
+
| `pf sprint new` | Initialize a new sprint |
|
|
16
|
+
| `pf sprint validate <file>` | Validate sprint YAML structure |
|
|
17
|
+
| `pf sprint archive <id>` | Archive a completed story |
|
|
18
|
+
| `pf sprint work <id>` | Start work on a story |
|
|
19
|
+
| `pf sprint story field <id> <field>` | Get a story field value |
|
|
20
|
+
| `pf sprint epic field <id> <field>` | Get an epic field value |
|
|
21
|
+
| `pf sprint epic promote <id>` | Move epic from future to current sprint |
|
|
22
|
+
| `pf sprint epic show <id>` | Show epic details |
|
|
23
|
+
| `pf sprint epic cancel <id>` | Cancel an epic |
|
|
24
|
+
| `pf sprint epic archive` | Archive completed epics |
|
|
18
25
|
|
|
19
26
|
## Usage
|
|
20
27
|
|
|
21
28
|
```bash
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
pf sprint status
|
|
30
|
+
pf sprint backlog
|
|
31
|
+
pf sprint future epic-55
|
|
32
|
+
pf sprint epic promote epic-41
|
|
24
33
|
```
|
|
25
34
|
|
|
26
35
|
## Ownership
|
|
27
36
|
|
|
28
37
|
- **Primary users:** SM agent, `/sprint` skill
|
|
29
38
|
- **Maintained by:** Core Pennyfarthing team
|
|
39
|
+
|
|
40
|
+
## Migration Note
|
|
41
|
+
|
|
42
|
+
All bash scripts previously in this directory have been migrated to Python CLI
|
|
43
|
+
commands in `pennyfarthing_scripts/sprint/cli.py`. See PR #716 and the follow-up
|
|
44
|
+
deprecation commit for details.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# - AC1: Updating **Phase:** field to next phase
|
|
7
7
|
# - AC2: Updating Phase History table with end timestamp and duration
|
|
8
8
|
# - AC3: Adding Handoff History row with gate and status
|
|
9
|
-
# - AC4:
|
|
9
|
+
# - AC4: prime correctly detects phase (integration)
|
|
10
10
|
# - AC5: All three transitions documented (TEA→Dev, Dev→Reviewer, Reviewer→SM)
|
|
11
11
|
|
|
12
12
|
set -euo pipefail
|
|
@@ -190,14 +190,14 @@ run_test test_ac3_status_in_history
|
|
|
190
190
|
run_test test_ac3_explicit_edit_for_history
|
|
191
191
|
|
|
192
192
|
# ==============================================================================
|
|
193
|
-
# AC4:
|
|
193
|
+
# AC4: prime correctly detects current phase after handoff
|
|
194
194
|
# ==============================================================================
|
|
195
195
|
echo ""
|
|
196
|
-
echo "--- AC4: workflow
|
|
196
|
+
echo "--- AC4: prime/workflow.py compatibility ---"
|
|
197
197
|
|
|
198
198
|
test_ac4_phase_field_format() {
|
|
199
|
-
# Phase field must use exact format that workflow
|
|
200
|
-
#
|
|
199
|
+
# Phase field must use exact format that prime/workflow.py expects
|
|
200
|
+
# parse_session_header greps for: **Phase:**
|
|
201
201
|
if echo "$HANDOFF_CONTENT" | grep -q '\*\*Phase:\*\*'; then
|
|
202
202
|
pass "AC4.1: Uses correct **Phase:** format"
|
|
203
203
|
else
|