@pennyfarthing/core 10.0.0 → 10.0.2
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/LICENSE +14 -0
- package/package.json +22 -12
- package/pennyfarthing-dist/agents/README.md +348 -0
- package/pennyfarthing-dist/agents/architect.md +180 -0
- package/pennyfarthing-dist/agents/dev.md +169 -0
- package/pennyfarthing-dist/agents/devops.md +203 -0
- package/pennyfarthing-dist/agents/handoff.md +235 -0
- package/pennyfarthing-dist/agents/orchestrator.md +182 -0
- package/pennyfarthing-dist/agents/pm.md +152 -0
- package/pennyfarthing-dist/agents/reviewer-preflight.md +129 -0
- package/pennyfarthing-dist/agents/reviewer.md +197 -0
- package/pennyfarthing-dist/agents/sm-file-summary.md +79 -0
- package/pennyfarthing-dist/agents/sm-finish.md +82 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +129 -0
- package/pennyfarthing-dist/agents/sm-setup.md +251 -0
- package/pennyfarthing-dist/agents/sm.md +298 -0
- package/pennyfarthing-dist/agents/tea.md +161 -0
- package/pennyfarthing-dist/agents/tech-writer.md +226 -0
- package/pennyfarthing-dist/agents/testing-runner.md +184 -0
- package/pennyfarthing-dist/agents/ux-designer.md +236 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +96 -0
- package/pennyfarthing-dist/commands/architect.md +9 -0
- package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
- package/pennyfarthing-dist/commands/benchmark.md +485 -0
- package/pennyfarthing-dist/commands/brainstorming.md +91 -0
- package/pennyfarthing-dist/commands/check.md +156 -0
- package/pennyfarthing-dist/commands/chore.md +218 -0
- package/pennyfarthing-dist/commands/close-epic.md +139 -0
- package/pennyfarthing-dist/commands/continue-session.md +218 -0
- package/pennyfarthing-dist/commands/create-branches-from-story.md +358 -0
- package/pennyfarthing-dist/commands/create-theme.md +29 -0
- package/pennyfarthing-dist/commands/dev.md +9 -0
- package/pennyfarthing-dist/commands/devops.md +9 -0
- package/pennyfarthing-dist/commands/fix-blocker.md +22 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +57 -0
- package/pennyfarthing-dist/commands/health-check.md +143 -0
- package/pennyfarthing-dist/commands/help.md +264 -0
- package/pennyfarthing-dist/commands/job-fair.md +102 -0
- package/pennyfarthing-dist/commands/list-themes.md +21 -0
- package/pennyfarthing-dist/commands/new-work.md +23 -0
- package/pennyfarthing-dist/commands/orchestrator.md +9 -0
- package/pennyfarthing-dist/commands/parallel-work.md +73 -0
- package/pennyfarthing-dist/commands/party-mode.md +77 -0
- package/pennyfarthing-dist/commands/patch.md +210 -0
- package/pennyfarthing-dist/commands/permissions.md +193 -0
- package/pennyfarthing-dist/commands/pm.md +9 -0
- package/pennyfarthing-dist/commands/prime.md +136 -0
- package/pennyfarthing-dist/commands/release.md +74 -0
- package/pennyfarthing-dist/commands/repo-status.md +49 -0
- package/pennyfarthing-dist/commands/retro.md +200 -0
- package/pennyfarthing-dist/commands/reviewer.md +9 -0
- package/pennyfarthing-dist/commands/run-ci.md +116 -0
- package/pennyfarthing-dist/commands/set-theme.md +56 -0
- package/pennyfarthing-dist/commands/setup.md +65 -0
- package/pennyfarthing-dist/commands/show-theme.md +21 -0
- package/pennyfarthing-dist/commands/sm.md +9 -0
- package/pennyfarthing-dist/commands/solo.md +447 -0
- package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
- package/pennyfarthing-dist/commands/sprint.md +142 -0
- package/pennyfarthing-dist/commands/standalone.md +194 -0
- package/pennyfarthing-dist/commands/start-epic.md +168 -0
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +373 -0
- package/pennyfarthing-dist/commands/tea.md +9 -0
- package/pennyfarthing-dist/commands/tech-writer.md +9 -0
- package/pennyfarthing-dist/commands/theme-maker.md +676 -0
- package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
- package/pennyfarthing-dist/commands/ux-designer.md +9 -0
- package/pennyfarthing-dist/commands/work.md +25 -0
- package/pennyfarthing-dist/commands/workflow.md +21 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +92 -0
- package/pennyfarthing-dist/guides/agent-coordination.md +475 -0
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +432 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
- package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
- package/pennyfarthing-dist/guides/hooks.md +230 -0
- package/pennyfarthing-dist/guides/measurement-framework.md +210 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +766 -0
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
- package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
- package/pennyfarthing-dist/guides/persona-loading.md +46 -0
- package/pennyfarthing-dist/guides/prompt-patterns.md +338 -0
- package/pennyfarthing-dist/guides/scale-levels.md +114 -0
- package/pennyfarthing-dist/guides/session-artifacts.md +193 -0
- package/pennyfarthing-dist/guides/session-schema.md +346 -0
- package/pennyfarthing-dist/guides/skill-schema.md +412 -0
- package/pennyfarthing-dist/guides/workflow-schema.md +257 -0
- package/pennyfarthing-dist/guides/workflow-step-schema.md +512 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
- package/pennyfarthing-dist/guides/xml-tags.md +627 -0
- package/pennyfarthing-dist/output-styles/teaching.md +33 -0
- package/pennyfarthing-dist/output-styles/terse.md +20 -0
- package/pennyfarthing-dist/output-styles/verbose.md +28 -0
- package/pennyfarthing-dist/personas/themes/a-team.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +324 -0
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +282 -0
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +304 -0
- package/pennyfarthing-dist/personas/themes/control.yaml +201 -0
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +315 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +284 -0
- package/pennyfarthing-dist/personas/themes/dune.yaml +301 -0
- package/pennyfarthing-dist/personas/themes/firefly.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +284 -0
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +316 -0
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +323 -0
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +326 -0
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +349 -0
- package/pennyfarthing-dist/personas/themes/mash.yaml +329 -0
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +344 -0
- package/pennyfarthing-dist/personas/themes/sandman.yaml +282 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +358 -0
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +297 -0
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +337 -0
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +342 -0
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +285 -0
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +285 -0
- package/pennyfarthing-dist/personas/themes/x-files.yaml +296 -0
- package/pennyfarthing-dist/scripts/README.md +87 -0
- package/pennyfarthing-dist/scripts/core/README.md +25 -0
- package/pennyfarthing-dist/scripts/core/agent-session.sh +390 -0
- package/pennyfarthing-dist/scripts/core/check-context.sh +194 -0
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +112 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +90 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +30 -0
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
- package/pennyfarthing-dist/scripts/git/README.md +25 -0
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +267 -0
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +152 -0
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +79 -0
- package/pennyfarthing-dist/scripts/git/release.sh +246 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +497 -0
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +156 -0
- package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +106 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +95 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +65 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +150 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +190 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +42 -0
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +20 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +499 -0
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +30 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +97 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +65 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +78 -0
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +94 -0
- package/pennyfarthing-dist/scripts/jira/README.md +36 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +95 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +91 -0
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +22 -0
- package/pennyfarthing-dist/scripts/jira/jira-lib.sh +464 -0
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +260 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +18 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync.sh +16 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-to-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/lib/README.md +29 -0
- package/pennyfarthing-dist/scripts/lib/background-tasks.sh +177 -0
- package/pennyfarthing-dist/scripts/lib/checkpoint.sh +136 -0
- package/pennyfarthing-dist/scripts/lib/common.sh +212 -0
- package/pennyfarthing-dist/scripts/lib/file-lock.sh +269 -0
- package/pennyfarthing-dist/scripts/lib/find-root.sh +58 -0
- package/pennyfarthing-dist/scripts/lib/logging.sh +186 -0
- package/pennyfarthing-dist/scripts/lib/retry.sh +76 -0
- package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +102 -0
- package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +91 -0
- package/pennyfarthing-dist/scripts/misc/README.md +44 -0
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +13 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +226 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +77 -0
- package/pennyfarthing-dist/scripts/misc/check-status.sh +247 -0
- package/pennyfarthing-dist/scripts/misc/find-related-work.sh +231 -0
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +107 -0
- package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +74 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +10 -0
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +319 -0
- package/pennyfarthing-dist/scripts/misc/repo-scan.sh +141 -0
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +778 -0
- package/pennyfarthing-dist/scripts/misc/run-ci.sh +212 -0
- package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +7 -0
- package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +319 -0
- package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +193 -0
- package/pennyfarthing-dist/scripts/misc/statusline.sh +257 -0
- package/pennyfarthing-dist/scripts/misc/uninstall.sh +275 -0
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +160 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +417 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +54 -0
- package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
- package/pennyfarthing-dist/scripts/sprint/archive-story.sh +133 -0
- package/pennyfarthing-dist/scripts/sprint/available-stories.sh +91 -0
- package/pennyfarthing-dist/scripts/sprint/check-story.sh +158 -0
- package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +52 -0
- package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +63 -0
- package/pennyfarthing-dist/scripts/sprint/list-future.sh +145 -0
- package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +110 -0
- package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +148 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +415 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +33 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +230 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
- package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +139 -0
- package/pennyfarthing-dist/scripts/story/README.md +23 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +19 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +18 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +18 -0
- package/pennyfarthing-dist/scripts/test/README.md +23 -0
- package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +59 -0
- package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +220 -0
- package/pennyfarthing-dist/scripts/test/swebench-judge.py +374 -0
- package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
- package/pennyfarthing-dist/scripts/test/test-setup.sh +337 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
- package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
- package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
- package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
- package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
- package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
- package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +106 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
- package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
- package/pennyfarthing-dist/scripts/theme/README.md +22 -0
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +13 -0
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +402 -0
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +30 -0
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +576 -0
- package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
- package/pennyfarthing-dist/scripts/workflow/check.py +502 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +24 -0
- package/pennyfarthing-dist/scripts/workflow/complete-step.py +304 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +154 -0
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +222 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +61 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +13 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +124 -0
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +34 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +157 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +132 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +250 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +161 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +246 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +385 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +172 -0
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +277 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +88 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +461 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +261 -0
- package/pennyfarthing-dist/skills/jira/SKILL.md +508 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +644 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +414 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +256 -0
- package/pennyfarthing-dist/skills/otel/skill.md +227 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +157 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +187 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +107 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +393 -0
- package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
- package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
- package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
- package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
- package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
- package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +93 -0
- package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
- package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
- package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
- package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
- package/pennyfarthing-dist/skills/story/skill.md +219 -0
- package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +446 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +121 -0
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
- package/pennyfarthing-dist/skills/theme/skill.md +141 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +178 -0
- package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
- package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
- package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
- package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
- package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
- package/pennyfarthing-dist/skills/workflow/skill.md +345 -0
- package/pennyfarthing-dist/skills/yq/SKILL.md +272 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
- package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
- package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +130 -0
- package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
- package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +113 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +105 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +127 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +145 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +150 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +145 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +154 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +172 -0
- package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
- package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +60 -0
- package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
- package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
- package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
- package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
- package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
- package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
- package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
- package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
- package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
- package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +281 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +256 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +298 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +177 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +145 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +28 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +103 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-02-categorize.md +147 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +215 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +97 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +78 -0
- package/pennyfarthing-dist/workflows/git-cleanup.yaml +59 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +211 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +199 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +202 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +162 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +280 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +158 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-01-connect.md +257 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-02-explore.md +107 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-03-fix.md +127 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-04-commit.md +122 -0
- package/pennyfarthing-dist/workflows/interactive-debug/workflow.yaml +51 -0
- package/pennyfarthing-dist/workflows/patch.yaml +67 -0
- package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
- package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
- package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +197 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +159 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +230 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +232 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +219 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +213 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +232 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +243 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +234 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +237 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +248 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +223 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +186 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +253 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +214 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +255 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +259 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +174 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +224 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +197 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +215 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +180 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +220 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +234 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +223 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +211 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +249 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +269 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +215 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +270 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +248 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +238 -0
- package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
- package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +195 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +180 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +221 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +224 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +228 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +243 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +216 -0
- package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
- package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
- package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +206 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +349 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +306 -0
- package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +157 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-02-clone-repos.md +217 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-03-repos-yaml.md +159 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-04-claude-md.md +186 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-05-shared-context.md +185 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-06-task-runner.md +279 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-07-theme.md +200 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-08-theme-packs.md +142 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-09-cyclist.md +245 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-10-complete.md +204 -0
- package/pennyfarthing-dist/workflows/project-setup/workflow.yaml +41 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +177 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +143 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +138 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +135 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +129 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +163 -0
- package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +201 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +156 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +140 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +203 -0
- package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
- package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/release/steps/step-01-preflight.md +105 -0
- package/pennyfarthing-dist/workflows/release/steps/step-02-bump.md +95 -0
- package/pennyfarthing-dist/workflows/release/steps/step-03-changelog.md +125 -0
- package/pennyfarthing-dist/workflows/release/steps/step-04-readme.md +101 -0
- package/pennyfarthing-dist/workflows/release/steps/step-05-claude-md.md +102 -0
- package/pennyfarthing-dist/workflows/release/steps/step-06-retro.md +59 -0
- package/pennyfarthing-dist/workflows/release/steps/step-07-commit.md +109 -0
- package/pennyfarthing-dist/workflows/release/steps/step-08-merge.md +65 -0
- package/pennyfarthing-dist/workflows/release/steps/step-09-push.md +75 -0
- package/pennyfarthing-dist/workflows/release/steps/step-10-publish.md +93 -0
- package/pennyfarthing-dist/workflows/release/steps/step-11-finalize.md +71 -0
- package/pennyfarthing-dist/workflows/release.yaml +62 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +159 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +253 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +263 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +232 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +260 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +477 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +205 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +262 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +227 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +275 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +286 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +203 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +510 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +159 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +264 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +274 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +228 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +267 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +522 -0
- package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
- package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
- package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
- package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
- package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
- package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
- package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +69 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +61 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +80 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +90 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +78 -0
- package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +141 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +133 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +196 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +222 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +225 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +240 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +258 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +260 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +230 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +230 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +247 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +254 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +243 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +270 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +234 -0
- package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
- package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Display current sprint status
|
|
3
|
+
# Usage: .pennyfarthing/scripts/sprint/sprint-status.sh [filter]
|
|
4
|
+
# or: Invoked with PROJECT_ROOT already set
|
|
5
|
+
#
|
|
6
|
+
# Filters:
|
|
7
|
+
# (none) - Show all stories
|
|
8
|
+
# todo - Show only backlog stories
|
|
9
|
+
# in-progress - Show only in_progress stories
|
|
10
|
+
# done - Show only done/cancelled stories
|
|
11
|
+
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
# PROJECT_ROOT should be set by find-root.sh, but find it if not
|
|
15
|
+
if [[ -z "${PROJECT_ROOT:-}" ]]; then
|
|
16
|
+
d="$PWD"
|
|
17
|
+
while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
|
|
18
|
+
d="$(dirname "$d")"
|
|
19
|
+
done
|
|
20
|
+
PROJECT_ROOT="$d"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Parse filter argument
|
|
24
|
+
FILTER="${1:-}"
|
|
25
|
+
case "$FILTER" in
|
|
26
|
+
todo|backlog)
|
|
27
|
+
STATUS_FILTER="backlog"
|
|
28
|
+
FILTER_LABEL="Todo"
|
|
29
|
+
;;
|
|
30
|
+
in-progress|wip)
|
|
31
|
+
STATUS_FILTER="in_progress"
|
|
32
|
+
FILTER_LABEL="In Progress"
|
|
33
|
+
;;
|
|
34
|
+
done|completed)
|
|
35
|
+
STATUS_FILTER="done"
|
|
36
|
+
FILTER_LABEL="Done"
|
|
37
|
+
;;
|
|
38
|
+
cancelled|canceled)
|
|
39
|
+
STATUS_FILTER="cancelled"
|
|
40
|
+
FILTER_LABEL="Cancelled"
|
|
41
|
+
;;
|
|
42
|
+
"")
|
|
43
|
+
STATUS_FILTER=""
|
|
44
|
+
FILTER_LABEL=""
|
|
45
|
+
;;
|
|
46
|
+
*)
|
|
47
|
+
echo "Error: Unknown filter '$FILTER'"
|
|
48
|
+
echo "Valid filters: todo, in-progress, done, cancelled"
|
|
49
|
+
exit 1
|
|
50
|
+
;;
|
|
51
|
+
esac
|
|
52
|
+
|
|
53
|
+
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
54
|
+
|
|
55
|
+
if [[ ! -f "$SPRINT_FILE" ]]; then
|
|
56
|
+
echo "Error: Sprint file not found at $SPRINT_FILE"
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
if ! command -v yq &> /dev/null; then
|
|
61
|
+
echo "Error: yq is required but not installed"
|
|
62
|
+
echo "Install with: brew install yq"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Extract sprint metadata
|
|
67
|
+
SPRINT_NAME=$(yq eval '.sprint.name' "$SPRINT_FILE")
|
|
68
|
+
SPRINT_GOAL=$(yq eval '.sprint.goal' "$SPRINT_FILE")
|
|
69
|
+
START_DATE=$(yq eval '.sprint.start_date' "$SPRINT_FILE")
|
|
70
|
+
END_DATE=$(yq eval '.sprint.end_date' "$SPRINT_FILE")
|
|
71
|
+
STATUS=$(yq eval '.sprint.status' "$SPRINT_FILE")
|
|
72
|
+
|
|
73
|
+
echo "# Sprint Status"
|
|
74
|
+
echo ""
|
|
75
|
+
echo "**Sprint:** $SPRINT_NAME"
|
|
76
|
+
echo "**Goal:** $SPRINT_GOAL"
|
|
77
|
+
echo "**Dates:** $START_DATE to $END_DATE"
|
|
78
|
+
echo "**Status:** $STATUS"
|
|
79
|
+
echo ""
|
|
80
|
+
|
|
81
|
+
# Count stories by status
|
|
82
|
+
TOTAL_STORIES=$(yq eval '[.epics[].stories[]] | length' "$SPRINT_FILE")
|
|
83
|
+
BACKLOG=$(yq eval '[.epics[].stories[] | select(.status == "backlog")] | length' "$SPRINT_FILE")
|
|
84
|
+
IN_PROGRESS=$(yq eval '[.epics[].stories[] | select(.status == "in_progress")] | length' "$SPRINT_FILE")
|
|
85
|
+
|
|
86
|
+
# Sum points using paste+bc (yq add not available in all versions)
|
|
87
|
+
sum_points() {
|
|
88
|
+
local result
|
|
89
|
+
result=$(echo "$1" | paste -sd+ - | bc 2>/dev/null)
|
|
90
|
+
echo "${result:-0}"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
TOTAL_POINTS=$(sum_points "$(yq '.epics[].stories[].points' "$SPRINT_FILE")")
|
|
94
|
+
BACKLOG_POINTS=$(sum_points "$(yq '.epics[].stories[] | select(.status == "backlog") | .points' "$SPRINT_FILE")")
|
|
95
|
+
IN_PROGRESS_POINTS=$(sum_points "$(yq '.epics[].stories[] | select(.status == "in_progress") | .points' "$SPRINT_FILE")")
|
|
96
|
+
|
|
97
|
+
echo "## Summary"
|
|
98
|
+
echo ""
|
|
99
|
+
echo "| Status | Stories | Points |"
|
|
100
|
+
echo "|--------|---------|--------|"
|
|
101
|
+
echo "| Backlog | $BACKLOG | $BACKLOG_POINTS |"
|
|
102
|
+
echo "| In Progress | $IN_PROGRESS | $IN_PROGRESS_POINTS |"
|
|
103
|
+
echo "| **Total Remaining** | **$TOTAL_STORIES** | **$TOTAL_POINTS** |"
|
|
104
|
+
echo ""
|
|
105
|
+
|
|
106
|
+
# List stories by epic (grouped - epic name appears once)
|
|
107
|
+
if [[ -n "$FILTER_LABEL" ]]; then
|
|
108
|
+
echo "## Stories by Epic (${FILTER_LABEL} only)"
|
|
109
|
+
else
|
|
110
|
+
echo "## Stories by Epic"
|
|
111
|
+
fi
|
|
112
|
+
echo ""
|
|
113
|
+
|
|
114
|
+
# Process each epic, output header once then all its stories
|
|
115
|
+
# Apply status filter if specified
|
|
116
|
+
if [[ -n "$STATUS_FILTER" ]]; then
|
|
117
|
+
yq eval -o=json '.epics[]' "$SPRINT_FILE" 2>/dev/null | jq -r --arg status "$STATUS_FILTER" '
|
|
118
|
+
.title as $title |
|
|
119
|
+
[.stories[] | select(.status == $status)] |
|
|
120
|
+
if length > 0 then
|
|
121
|
+
"### " + $title + "\n" +
|
|
122
|
+
(map("- [" + .status + "] " + .id + ": " + .title + " (" + (.points | tostring) + " pts)") | join("\n")) + "\n"
|
|
123
|
+
else
|
|
124
|
+
empty
|
|
125
|
+
end
|
|
126
|
+
' 2>/dev/null || echo "No stories found"
|
|
127
|
+
else
|
|
128
|
+
yq eval -o=json '.epics[]' "$SPRINT_FILE" 2>/dev/null | jq -r '
|
|
129
|
+
"### " + .title + "\n" +
|
|
130
|
+
(.stories | map("- [" + .status + "] " + .id + ": " + .title + " (" + (.points | tostring) + " pts)") | join("\n")) + "\n"
|
|
131
|
+
' 2>/dev/null || echo "No stories found"
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Check archive for completed count
|
|
135
|
+
SPRINT_NUM=$(echo "$SPRINT_NAME" | sed 's/TO Sprint //')
|
|
136
|
+
ARCHIVE_FILE="$PROJECT_ROOT/sprint/archive/sprint-${SPRINT_NUM}-completed.yaml"
|
|
137
|
+
|
|
138
|
+
if [[ -f "$ARCHIVE_FILE" ]]; then
|
|
139
|
+
COMPLETED_COUNT=$(yq '.completed | length' "$ARCHIVE_FILE" 2>/dev/null || echo "0")
|
|
140
|
+
COMPLETED_POINTS=$(sum_points "$(yq '.completed[].points' "$ARCHIVE_FILE" 2>/dev/null)")
|
|
141
|
+
echo ""
|
|
142
|
+
echo "## Completed This Sprint"
|
|
143
|
+
echo ""
|
|
144
|
+
echo "**Stories:** $COMPLETED_COUNT | **Points:** $COMPLETED_POINTS"
|
|
145
|
+
echo ""
|
|
146
|
+
echo "See: sprint/archive/sprint-${SPRINT_NUM}-completed.yaml"
|
|
147
|
+
fi
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Sync an epic and its stories to Jira
|
|
3
|
+
# Usage: .pennyfarthing/scripts/sprint/sync-epic-jira.sh <epic-id> [--dry-run] [--transition] [--points] [--all]
|
|
4
|
+
#
|
|
5
|
+
# Example: .pennyfarthing/scripts/sprint/sync-epic-jira.sh MSSCI-11952
|
|
6
|
+
# Example: .pennyfarthing/scripts/sprint/sync-epic-jira.sh MSSCI-11952 --all
|
|
7
|
+
#
|
|
8
|
+
# This script syncs status and story points from sprint YAML to Jira.
|
|
9
|
+
# Thin wrapper that delegates to Python CLI.
|
|
10
|
+
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
# Find package root (where pennyfarthing_scripts lives) from script location
|
|
14
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
15
|
+
PACKAGE_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd -P)"
|
|
16
|
+
|
|
17
|
+
# Set PYTHONPATH so Python can find pennyfarthing_scripts
|
|
18
|
+
export PYTHONPATH="${PACKAGE_ROOT}:${PYTHONPATH:-}"
|
|
19
|
+
|
|
20
|
+
EPIC_ID="${1:-}"
|
|
21
|
+
|
|
22
|
+
if [[ -z "$EPIC_ID" ]]; then
|
|
23
|
+
echo "Usage: sync-epic-jira.sh <epic-id> [options]"
|
|
24
|
+
echo ""
|
|
25
|
+
echo "Syncs an epic and its stories from sprint YAML to Jira."
|
|
26
|
+
echo ""
|
|
27
|
+
echo "Options:"
|
|
28
|
+
echo " --dry-run Show what would be done without making changes"
|
|
29
|
+
echo " --transition Transition Jira issues to match sprint YAML status"
|
|
30
|
+
echo " --points Sync story points from sprint YAML to Jira"
|
|
31
|
+
echo " --all Equivalent to --transition --points"
|
|
32
|
+
echo ""
|
|
33
|
+
echo "Examples:"
|
|
34
|
+
echo " sync-epic-jira.sh MSSCI-11952 # Show sync status"
|
|
35
|
+
echo " sync-epic-jira.sh MSSCI-11952 --dry-run # Preview changes"
|
|
36
|
+
echo " sync-epic-jira.sh MSSCI-11952 --all # Sync status and points"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# PROJECT_ROOT should be set by find-root.sh, but find it if not
|
|
41
|
+
if [[ -z "${PROJECT_ROOT:-}" ]]; then
|
|
42
|
+
d="$PWD"
|
|
43
|
+
while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
|
|
44
|
+
d="$(dirname "$d")"
|
|
45
|
+
done
|
|
46
|
+
PROJECT_ROOT="$d"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
50
|
+
|
|
51
|
+
if [[ ! -f "$SPRINT_FILE" ]]; then
|
|
52
|
+
echo "Error: Sprint file not found at $SPRINT_FILE"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if ! command -v yq &> /dev/null; then
|
|
57
|
+
echo "Error: yq is required but not installed"
|
|
58
|
+
echo "Install with: brew install yq"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Check if epic exists in sprint YAML
|
|
63
|
+
EPIC_EXISTS=$(yq ".epics[] | select(.id == \"$EPIC_ID\") | .id" "$SPRINT_FILE" 2>/dev/null || echo "")
|
|
64
|
+
|
|
65
|
+
if [[ -z "$EPIC_EXISTS" ]]; then
|
|
66
|
+
echo "Error: Epic $EPIC_ID not found in $SPRINT_FILE"
|
|
67
|
+
echo ""
|
|
68
|
+
echo "Available epics:"
|
|
69
|
+
yq '.epics[].id' "$SPRINT_FILE" 2>/dev/null || echo " None found"
|
|
70
|
+
exit 1
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Build arguments for Python CLI
|
|
74
|
+
shift # Remove epic-id from arguments
|
|
75
|
+
SYNC_ARGS=("$EPIC_ID")
|
|
76
|
+
|
|
77
|
+
# Handle --all flag
|
|
78
|
+
for arg in "$@"; do
|
|
79
|
+
case "$arg" in
|
|
80
|
+
--all)
|
|
81
|
+
SYNC_ARGS+=("--transition" "--points")
|
|
82
|
+
;;
|
|
83
|
+
*)
|
|
84
|
+
SYNC_ARGS+=("$arg")
|
|
85
|
+
;;
|
|
86
|
+
esac
|
|
87
|
+
done
|
|
88
|
+
|
|
89
|
+
echo "Syncing epic $EPIC_ID to Jira..."
|
|
90
|
+
echo ""
|
|
91
|
+
|
|
92
|
+
# Delegate to Python CLI
|
|
93
|
+
exec python3 -m pennyfarthing_scripts.jira sync "${SYNC_ARGS[@]}"
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sprint
|
|
3
|
+
description: |
|
|
4
|
+
Sprint status, backlog, and story management for Pennyfarthing. Use when checking current
|
|
5
|
+
sprint status, finding available stories, reviewing backlog, or understanding story context
|
|
6
|
+
and history.
|
|
7
|
+
IMPORTANT: Always use the provided scripts - never manually edit sprint YAML.
|
|
8
|
+
args: "[status|backlog|work|archive|new|promote]"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /sprint - Sprint Management
|
|
12
|
+
|
|
13
|
+
<critical>
|
|
14
|
+
Never manually edit `sprint/current-sprint.yaml`. Use the scripts below for deterministic, correct YAML formatting.
|
|
15
|
+
</critical>
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
### `/sprint` or `/sprint status [filter]`
|
|
20
|
+
|
|
21
|
+
Show current sprint status with story counts and points.
|
|
22
|
+
|
|
23
|
+
<run>
|
|
24
|
+
.pennyfarthing/scripts/sprint/sprint-status.sh [filter]
|
|
25
|
+
</run>
|
|
26
|
+
|
|
27
|
+
<args>
|
|
28
|
+
| Arg | Required | Description |
|
|
29
|
+
|-----|----------|-------------|
|
|
30
|
+
| `filter` | No | Filter stories: `todo`, `in-progress`, `done`, `cancelled` |
|
|
31
|
+
</args>
|
|
32
|
+
|
|
33
|
+
<example>
|
|
34
|
+
.pennyfarthing/scripts/sprint/sprint-status.sh # All stories
|
|
35
|
+
.pennyfarthing/scripts/sprint/sprint-status.sh todo # Backlog only
|
|
36
|
+
.pennyfarthing/scripts/sprint/sprint-status.sh in-progress # WIP only
|
|
37
|
+
.pennyfarthing/scripts/sprint/sprint-status.sh done # Completed only
|
|
38
|
+
</example>
|
|
39
|
+
|
|
40
|
+
<output>
|
|
41
|
+
Sprint metadata, stories by status (grouped under epic headers), points breakdown, completed count from archive.
|
|
42
|
+
When filtered, only shows epics with matching stories.
|
|
43
|
+
</output>
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### `/sprint backlog`
|
|
48
|
+
|
|
49
|
+
Show available stories grouped by epic with Jira context.
|
|
50
|
+
|
|
51
|
+
<run>
|
|
52
|
+
.pennyfarthing/scripts/sprint/available-stories.sh
|
|
53
|
+
</run>
|
|
54
|
+
|
|
55
|
+
<output>
|
|
56
|
+
Backlog stories with epic descriptions, points, priority, and workflow tags.
|
|
57
|
+
</output>
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### `/sprint work [story-id|epic-id|next]`
|
|
62
|
+
|
|
63
|
+
Start work on a story. This is the primary entry point for development work.
|
|
64
|
+
|
|
65
|
+
<when>
|
|
66
|
+
- Starting new development work
|
|
67
|
+
- `/new-work` is an alias for this command
|
|
68
|
+
</when>
|
|
69
|
+
|
|
70
|
+
#### Without argument: Interactive selection
|
|
71
|
+
|
|
72
|
+
Shows backlog, user selects story, then proceeds to setup.
|
|
73
|
+
|
|
74
|
+
<output>
|
|
75
|
+
1. Load SM persona
|
|
76
|
+
2. Check for in-progress work
|
|
77
|
+
3. Show available stories
|
|
78
|
+
4. User selects story
|
|
79
|
+
5. Setup and handoff to TEA/Dev
|
|
80
|
+
</output>
|
|
81
|
+
|
|
82
|
+
#### With story ID: Direct start
|
|
83
|
+
|
|
84
|
+
<run>
|
|
85
|
+
.pennyfarthing/scripts/sprint/check-story.sh <story-id>
|
|
86
|
+
</run>
|
|
87
|
+
|
|
88
|
+
<args>
|
|
89
|
+
| Arg | Required | Description |
|
|
90
|
+
|-----|----------|-------------|
|
|
91
|
+
| `story-id` | Yes | Jira key (e.g., `MSSCI-12038`) |
|
|
92
|
+
</args>
|
|
93
|
+
|
|
94
|
+
<output>
|
|
95
|
+
- `available: true` - Skip backlog, proceed to setup
|
|
96
|
+
- `available: false` - Report why (assigned, in progress, etc.)
|
|
97
|
+
</output>
|
|
98
|
+
|
|
99
|
+
<example>
|
|
100
|
+
.pennyfarthing/scripts/sprint/check-story.sh MSSCI-12038
|
|
101
|
+
# Returns: {"type": "story", "available": true, "title": "...", ...}
|
|
102
|
+
</example>
|
|
103
|
+
|
|
104
|
+
#### With epic ID: Start first available story in epic
|
|
105
|
+
|
|
106
|
+
<run>
|
|
107
|
+
.pennyfarthing/scripts/sprint/check-story.sh <epic-id>
|
|
108
|
+
</run>
|
|
109
|
+
|
|
110
|
+
<output>
|
|
111
|
+
Epic info with `first_story` (highest priority available story).
|
|
112
|
+
Action: Automatically start work on `first_story` if available.
|
|
113
|
+
</output>
|
|
114
|
+
|
|
115
|
+
<example>
|
|
116
|
+
.pennyfarthing/scripts/sprint/check-story.sh MSSCI-11952
|
|
117
|
+
# Returns: {"type": "epic", "first_story": {"id": "MSSCI-11954", ...}, ...}
|
|
118
|
+
</example>
|
|
119
|
+
|
|
120
|
+
#### With `next`: Auto-select highest priority story
|
|
121
|
+
|
|
122
|
+
<run>
|
|
123
|
+
.pennyfarthing/scripts/sprint/check-story.sh next
|
|
124
|
+
</run>
|
|
125
|
+
|
|
126
|
+
<output>
|
|
127
|
+
Highest-priority available story across all epics.
|
|
128
|
+
Action: Automatically start work on returned story.
|
|
129
|
+
</output>
|
|
130
|
+
|
|
131
|
+
<example>
|
|
132
|
+
.pennyfarthing/scripts/sprint/check-story.sh next
|
|
133
|
+
# Returns: {"type": "next", "story": {"id": "MSSCI-11950", "priority": "P1", ...}}
|
|
134
|
+
</example>
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### `/sprint archive <story-id> [pr-number] [--apply]`
|
|
139
|
+
|
|
140
|
+
Archive a completed story to the sprint archive file.
|
|
141
|
+
|
|
142
|
+
<run>
|
|
143
|
+
.pennyfarthing/scripts/sprint/archive-story.sh <story-id> [pr-number] [--apply]
|
|
144
|
+
</run>
|
|
145
|
+
|
|
146
|
+
<args>
|
|
147
|
+
| Arg | Required | Description |
|
|
148
|
+
|-----|----------|-------------|
|
|
149
|
+
| `story-id` | Yes | Story ID (e.g., `35-2`) |
|
|
150
|
+
| `pr-number` | No | PR number if merged via PR |
|
|
151
|
+
| `--apply` | No | Also remove story from current-sprint.yaml |
|
|
152
|
+
</args>
|
|
153
|
+
|
|
154
|
+
<example>
|
|
155
|
+
# Archive only (manual removal needed)
|
|
156
|
+
.pennyfarthing/scripts/sprint/archive-story.sh 35-2 368
|
|
157
|
+
|
|
158
|
+
# Archive and remove atomically (recommended)
|
|
159
|
+
.pennyfarthing/scripts/sprint/archive-story.sh 35-2 368 --apply
|
|
160
|
+
</example>
|
|
161
|
+
|
|
162
|
+
<output>
|
|
163
|
+
1. Extracts story from `current-sprint.yaml`
|
|
164
|
+
2. Appends to `sprint/archive/sprint-{YYWW}-completed.yaml`
|
|
165
|
+
3. With `--apply`: Also removes from current sprint
|
|
166
|
+
4. Without `--apply`: Outputs command to complete removal
|
|
167
|
+
</output>
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### `/sprint new <yyww> <jira-id> <start> <end> "<goal>"`
|
|
172
|
+
|
|
173
|
+
Initialize a new sprint from template.
|
|
174
|
+
|
|
175
|
+
<run>
|
|
176
|
+
.pennyfarthing/scripts/sprint/new-sprint.sh <yyww> <jira-id> <start> <end> "<goal>"
|
|
177
|
+
</run>
|
|
178
|
+
|
|
179
|
+
<args>
|
|
180
|
+
| Arg | Required | Description |
|
|
181
|
+
|-----|----------|-------------|
|
|
182
|
+
| `yyww` | Yes | Sprint identifier (e.g., `2605` for 2026 week 5) |
|
|
183
|
+
| `jira-id` | Yes | Jira sprint ID number (e.g., `277`) |
|
|
184
|
+
| `start` | Yes | Start date `YYYY-MM-DD` |
|
|
185
|
+
| `end` | Yes | End date `YYYY-MM-DD` |
|
|
186
|
+
| `goal` | Yes | Sprint goal (quoted string) |
|
|
187
|
+
</args>
|
|
188
|
+
|
|
189
|
+
<example>
|
|
190
|
+
.pennyfarthing/scripts/sprint/new-sprint.sh 2605 277 2026-02-03 2026-02-16 "Polish and stabilization"
|
|
191
|
+
</example>
|
|
192
|
+
|
|
193
|
+
<output>
|
|
194
|
+
Creates:
|
|
195
|
+
- `sprint/current-sprint.yaml` - New sprint file
|
|
196
|
+
- `sprint/archive/sprint-{YYWW}-completed.yaml` - Empty archive
|
|
197
|
+
|
|
198
|
+
Warning: Prompts for confirmation if current sprint is still active.
|
|
199
|
+
</output>
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### `/sprint future [--epic EPIC_ID]`
|
|
204
|
+
|
|
205
|
+
Show future work initiatives and epics available for promotion.
|
|
206
|
+
|
|
207
|
+
<run>
|
|
208
|
+
.pennyfarthing/scripts/sprint/list-future.sh [--epic EPIC_ID]
|
|
209
|
+
</run>
|
|
210
|
+
|
|
211
|
+
<args>
|
|
212
|
+
| Arg | Required | Description |
|
|
213
|
+
|-----|----------|-------------|
|
|
214
|
+
| `--epic` | No | Show detailed stories for a specific epic |
|
|
215
|
+
</args>
|
|
216
|
+
|
|
217
|
+
<output>
|
|
218
|
+
Without `--epic`:
|
|
219
|
+
- Initiatives grouped by status (READY, BLOCKED, planning)
|
|
220
|
+
- Epics with points, priority, and status
|
|
221
|
+
- Summary of total epics and points
|
|
222
|
+
- Promotion instructions
|
|
223
|
+
|
|
224
|
+
With `--epic`:
|
|
225
|
+
- Full epic details including description
|
|
226
|
+
- All stories with points and status
|
|
227
|
+
- Promotion command for that epic
|
|
228
|
+
</output>
|
|
229
|
+
|
|
230
|
+
<example>
|
|
231
|
+
# Show all future work
|
|
232
|
+
.pennyfarthing/scripts/sprint/list-future.sh
|
|
233
|
+
|
|
234
|
+
# Show details for specific epic
|
|
235
|
+
.pennyfarthing/scripts/sprint/list-future.sh --epic epic-55
|
|
236
|
+
</example>
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### `/sprint promote <epic-id>`
|
|
241
|
+
|
|
242
|
+
Move an epic from `future.yaml` to `current-sprint.yaml`.
|
|
243
|
+
|
|
244
|
+
<run>
|
|
245
|
+
.pennyfarthing/scripts/sprint/promote-epic.sh <epic-id>
|
|
246
|
+
</run>
|
|
247
|
+
|
|
248
|
+
<args>
|
|
249
|
+
| Arg | Required | Description |
|
|
250
|
+
|-----|----------|-------------|
|
|
251
|
+
| `epic-id` | Yes | Local epic ID (e.g., `epic-41`) |
|
|
252
|
+
</args>
|
|
253
|
+
|
|
254
|
+
<example>
|
|
255
|
+
.pennyfarthing/scripts/sprint/promote-epic.sh epic-41
|
|
256
|
+
</example>
|
|
257
|
+
|
|
258
|
+
<output>
|
|
259
|
+
1. Finds epic in `sprint/planning.yaml`
|
|
260
|
+
2. Extracts epic metadata and all stories
|
|
261
|
+
3. Appends to `sprint/current-sprint.yaml` epics section
|
|
262
|
+
4. Outputs yq command to remove from planning.yaml
|
|
263
|
+
</output>
|
|
264
|
+
|
|
265
|
+
<when>
|
|
266
|
+
Next steps after promote:
|
|
267
|
+
- Review appended YAML in current-sprint.yaml
|
|
268
|
+
- Create Jira epic: `/jira create epic <epic-id>`
|
|
269
|
+
- Remove from planning.yaml if desired
|
|
270
|
+
</when>
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Read Operations
|
|
275
|
+
|
|
276
|
+
These scripts read sprint YAML without modifying it. Use these instead of direct `yq` queries.
|
|
277
|
+
|
|
278
|
+
### Get Story Field
|
|
279
|
+
|
|
280
|
+
<run>
|
|
281
|
+
.pennyfarthing/scripts/sprint/get-story-field.sh <story-id> <field>
|
|
282
|
+
</run>
|
|
283
|
+
|
|
284
|
+
<args>
|
|
285
|
+
| Arg | Required | Description |
|
|
286
|
+
|-----|----------|-------------|
|
|
287
|
+
| `story-id` | Yes | Story ID (e.g., `35-2`) |
|
|
288
|
+
| `field` | Yes | Field name to extract |
|
|
289
|
+
</args>
|
|
290
|
+
|
|
291
|
+
<example>
|
|
292
|
+
.pennyfarthing/scripts/sprint/get-story-field.sh 35-2 workflow # Returns: tdd
|
|
293
|
+
.pennyfarthing/scripts/sprint/get-story-field.sh 35-2 jira # Returns: MSSCI-12345
|
|
294
|
+
.pennyfarthing/scripts/sprint/get-story-field.sh 35-2 status # Returns: in_progress
|
|
295
|
+
</example>
|
|
296
|
+
|
|
297
|
+
<output>
|
|
298
|
+
Field value or "null" if not found. Common fields: `workflow`, `status`, `jira`, `points`, `title`, `repos`, `priority`.
|
|
299
|
+
</output>
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
### Get Epic Field
|
|
304
|
+
|
|
305
|
+
<run>
|
|
306
|
+
.pennyfarthing/scripts/sprint/get-epic-field.sh <epic-id> <field>
|
|
307
|
+
</run>
|
|
308
|
+
|
|
309
|
+
<args>
|
|
310
|
+
| Arg | Required | Description |
|
|
311
|
+
|-----|----------|-------------|
|
|
312
|
+
| `epic-id` | Yes | Epic ID (e.g., `epic-35` or just `35`) |
|
|
313
|
+
| `field` | Yes | Field name to extract |
|
|
314
|
+
</args>
|
|
315
|
+
|
|
316
|
+
<example>
|
|
317
|
+
.pennyfarthing/scripts/sprint/get-epic-field.sh epic-35 jira # Returns: MSSCI-11234
|
|
318
|
+
.pennyfarthing/scripts/sprint/get-epic-field.sh 35 title # Returns: Epic title
|
|
319
|
+
</example>
|
|
320
|
+
|
|
321
|
+
<output>
|
|
322
|
+
Field value or "null" if not found. Common fields: `jira`, `title`, `description`, `status`.
|
|
323
|
+
</output>
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Jira Operations
|
|
328
|
+
|
|
329
|
+
For Jira-specific operations, use the `/jira` skill:
|
|
330
|
+
|
|
331
|
+
| Task | Command |
|
|
332
|
+
|------|---------|
|
|
333
|
+
| Create epic in Jira | `/jira create epic <epic-id>` |
|
|
334
|
+
| Sync epic to Jira | `/jira sync <epic-id>` |
|
|
335
|
+
| Reconcile YAML vs Jira | `/jira reconcile` |
|
|
336
|
+
| Claim a story | `/jira claim <issue-key>` |
|
|
337
|
+
| View issue details | `/jira view <issue-key>` |
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Work Flow Details
|
|
342
|
+
|
|
343
|
+
<when>
|
|
344
|
+
When `/sprint work` (or `/new-work`) starts a story:
|
|
345
|
+
</when>
|
|
346
|
+
|
|
347
|
+
<agent-activation>
|
|
348
|
+
Load SM persona first:
|
|
349
|
+
```bash
|
|
350
|
+
d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/agent-session.sh" start "sm"
|
|
351
|
+
```
|
|
352
|
+
</agent-activation>
|
|
353
|
+
|
|
354
|
+
### Story Setup Steps
|
|
355
|
+
|
|
356
|
+
<output>
|
|
357
|
+
1. **Check story** via `check-story.sh` (if ID provided)
|
|
358
|
+
2. **Write context** to `.session/context-story-{id}.md`
|
|
359
|
+
3. **Setup story** via `sm-setup` subagent (claims Jira, creates branch)
|
|
360
|
+
4. **Handoff** to next agent based on workflow:
|
|
361
|
+
|
|
362
|
+
| Workflow | Route |
|
|
363
|
+
|----------|-------|
|
|
364
|
+
| `trivial` | SM → Dev |
|
|
365
|
+
| `tdd` | SM → TEA → Dev → Reviewer |
|
|
366
|
+
| `agent-docs` | SM → Orchestrator |
|
|
367
|
+
</output>
|
|
368
|
+
|
|
369
|
+
### Gates Before Handoff
|
|
370
|
+
|
|
371
|
+
<critical>
|
|
372
|
+
All gates must pass before handoff:
|
|
373
|
+
- [ ] Session file exists at `.session/{story-id}-session.md`
|
|
374
|
+
- [ ] Story context written with ACs
|
|
375
|
+
- [ ] Jira claimed (assigned, In Progress)
|
|
376
|
+
- [ ] Branch created
|
|
377
|
+
</critical>
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## File Locations
|
|
382
|
+
|
|
383
|
+
| File | Purpose |
|
|
384
|
+
|------|---------|
|
|
385
|
+
| `sprint/current-sprint.yaml` | Active/backlog work only |
|
|
386
|
+
| `sprint/archive/sprint-{YYWW}-completed.yaml` | Completed stories for sprint |
|
|
387
|
+
| `sprint/sprint-template.yaml` | Format reference |
|
|
388
|
+
|
|
389
|
+
## YAML Constraints
|
|
390
|
+
|
|
391
|
+
| Field | Valid Values |
|
|
392
|
+
|-------|-------------|
|
|
393
|
+
| Sprint name | `"TO Sprint YYWW"` (e.g., "TO Sprint 2604") |
|
|
394
|
+
| Story IDs | Jira keys `MSSCI-XXXXX` |
|
|
395
|
+
| Status | `backlog`, `ready`, `in_progress`, `done` |
|
|
396
|
+
| Workflow | `tdd`, `trivial`, `agent-docs`, `bdd` |
|
|
397
|
+
| Priority | `P0`, `P1`, `P2`, `P3` |
|
|
398
|
+
| in_sprint | `true`, `false` - Jira sprint membership |
|
|
399
|
+
|
|
400
|
+
## Sprint Schema
|
|
401
|
+
|
|
402
|
+
### Sprint-level fields
|
|
403
|
+
|
|
404
|
+
| Field | Description |
|
|
405
|
+
|-------|-------------|
|
|
406
|
+
| `name` | Sprint name in "TO Sprint YYWW" format |
|
|
407
|
+
| `jira_sprint_id` | Numeric Jira sprint ID (e.g., 276) |
|
|
408
|
+
| `jira_sprint_name` | Jira sprint name (should match name) |
|
|
409
|
+
| `goal` | Sprint goal/objective |
|
|
410
|
+
| `start_date` | YYYY-MM-DD |
|
|
411
|
+
| `end_date` | YYYY-MM-DD |
|
|
412
|
+
| `status` | `active` or `closed` |
|
|
413
|
+
|
|
414
|
+
### Story-level fields
|
|
415
|
+
|
|
416
|
+
| Field | Description |
|
|
417
|
+
|-------|-------------|
|
|
418
|
+
| `in_sprint` | `true/false` - whether story is in Jira sprint (synced bidirectionally) |
|
|
419
|
+
|
|
420
|
+
<output>
|
|
421
|
+
The `in_sprint` field tracks Jira sprint membership:
|
|
422
|
+
- `in_sprint: true` - Story is in the Jira sprint
|
|
423
|
+
- `in_sprint: false` - Story is not in Jira sprint (backlog)
|
|
424
|
+
- Field omitted - Sprint membership not explicitly tracked
|
|
425
|
+
</output>
|
|
426
|
+
|
|
427
|
+
## Dependencies
|
|
428
|
+
|
|
429
|
+
<run>
|
|
430
|
+
brew install yq
|
|
431
|
+
</run>
|
|
432
|
+
|
|
433
|
+
<when>
|
|
434
|
+
For Jira integration, see `/jira` skill prerequisites.
|
|
435
|
+
</when>
|
|
436
|
+
|
|
437
|
+
## Quick Reference
|
|
438
|
+
|
|
439
|
+
| Command | Script/Action |
|
|
440
|
+
|---------|---------------|
|
|
441
|
+
| `/sprint` | `sprint-status.sh` |
|
|
442
|
+
| `/sprint status` | `sprint-status.sh` |
|
|
443
|
+
| `/sprint status todo` | `sprint-status.sh todo` |
|
|
444
|
+
| `/sprint status in-progress` | `sprint-status.sh in-progress` |
|
|
445
|
+
| `/sprint status done` | `sprint-status.sh done` |
|
|
446
|
+
| `/sprint backlog` | `available-stories.sh` |
|
|
447
|
+
| `/sprint work` | Interactive story selection → SM flow |
|
|
448
|
+
| `/sprint work MSSCI-XXX` | `check-story.sh` → direct start |
|
|
449
|
+
| `/sprint work EPIC-ID` | `check-story.sh` → start first story |
|
|
450
|
+
| `/sprint work next` | `check-story.sh next` → start highest priority |
|
|
451
|
+
| `/sprint archive MSSCI-XXX` | `archive-story.sh MSSCI-XXX` |
|
|
452
|
+
| `/sprint new 2605 277 ...` | `new-sprint.sh 2605 277 ...` |
|
|
453
|
+
| `/sprint future` | `list-future.sh` |
|
|
454
|
+
| `/sprint future --epic X` | `list-future.sh --epic X` |
|
|
455
|
+
| `/sprint promote epic-41` | `promote-epic.sh epic-41` |
|
|
456
|
+
| `/new-work` | Alias for `/sprint work` |
|
|
457
|
+
| `/new-work MSSCI-XXX` | Alias for `/sprint work MSSCI-XXX` |
|
|
458
|
+
| `/new-work next` | Alias for `/sprint work next` |
|
|
459
|
+
|
|
460
|
+
## Related Skills
|
|
461
|
+
|
|
462
|
+
| Skill | Purpose |
|
|
463
|
+
|-------|---------|
|
|
464
|
+
| `/jira` | Jira operations (create, sync, reconcile, claim) |
|
|
465
|
+
| `/story` | Story creation, sizing, finish workflow |
|