@pennyfarthing/core 7.0.2 → 7.4.1
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/README.md +2 -2
- package/package.json +11 -10
- package/packages/core/dist/cli/commands/cyclist.d.ts +2 -2
- package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/cyclist.js +8 -9
- package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
- package/packages/core/dist/cli/commands/cyclist.test.js +6 -4
- package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
- package/packages/core/dist/cli/commands/init.js +4 -3
- 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 +15 -139
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/cyclist-migration.test.js +4 -3
- package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
- package/packages/core/dist/cli/utils/constants.d.ts +7 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +4 -2
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/node-modules.js +2 -1
- package/packages/core/dist/cli/utils/node-modules.js.map +1 -1
- package/packages/core/dist/cli/utils/themes.d.ts +1 -4
- package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/themes.js +2 -22
- package/packages/core/dist/cli/utils/themes.js.map +1 -1
- package/packages/core/dist/cli/utils/themes.test.d.ts +3 -3
- package/packages/core/dist/cli/utils/themes.test.js +16 -13
- package/packages/core/dist/cli/utils/themes.test.js.map +1 -1
- package/packages/core/dist/cli/workspace.test.js +11 -9
- package/packages/core/dist/cli/workspace.test.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -0
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +10 -0
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/jira/jira-epic-creation.d.ts +109 -0
- package/packages/core/dist/jira/jira-epic-creation.d.ts.map +1 -0
- package/packages/core/dist/jira/jira-epic-creation.js +253 -0
- package/packages/core/dist/jira/jira-epic-creation.js.map +1 -0
- package/packages/core/dist/jira/jira-epic-creation.test.d.ts +16 -0
- package/packages/core/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
- package/packages/core/dist/jira/jira-epic-creation.test.js +387 -0
- package/packages/core/dist/jira/jira-epic-creation.test.js.map +1 -0
- package/packages/core/dist/jira/jira-sprint-sync.d.ts +247 -0
- package/packages/core/dist/jira/jira-sprint-sync.d.ts.map +1 -0
- package/packages/core/dist/jira/jira-sprint-sync.js +670 -0
- package/packages/core/dist/jira/jira-sprint-sync.js.map +1 -0
- package/packages/core/dist/jira/jira-sprint-sync.test.d.ts +16 -0
- package/packages/core/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
- package/packages/core/dist/jira/jira-sprint-sync.test.js +845 -0
- package/packages/core/dist/jira/jira-sprint-sync.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.d.ts +11 -1
- package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
- package/packages/core/dist/scripts/generate-spider.js +24 -1
- package/packages/core/dist/scripts/generate-spider.js.map +1 -1
- package/packages/core/dist/scripts/generate-spider.test.js +6 -4
- package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
- package/packages/core/dist/workflow/gate-handler.d.ts +94 -0
- package/packages/core/dist/workflow/gate-handler.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-handler.js +189 -0
- package/packages/core/dist/workflow/gate-handler.js.map +1 -0
- package/packages/core/dist/workflow/gate-handler.test.d.ts +14 -0
- package/packages/core/dist/workflow/gate-handler.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-handler.test.js +543 -0
- package/packages/core/dist/workflow/gate-handler.test.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts +46 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -1
- package/packages/core/dist/workflow/generic-handoff.js +53 -0
- package/packages/core/dist/workflow/generic-handoff.js.map +1 -1
- package/packages/core/dist/workflow/generic-handoff.test.js +2 -2
- package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -1
- package/packages/core/dist/workflow/handoff.d.ts +281 -0
- package/packages/core/dist/workflow/handoff.d.ts.map +1 -0
- package/packages/core/dist/workflow/handoff.js +411 -0
- package/packages/core/dist/workflow/handoff.js.map +1 -0
- package/packages/core/dist/workflow/handoff.test.d.ts +21 -0
- package/packages/core/dist/workflow/handoff.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/handoff.test.js +499 -0
- package/packages/core/dist/workflow/handoff.test.js.map +1 -0
- package/packages/core/dist/workflow/index.d.ts +16 -0
- package/packages/core/dist/workflow/index.d.ts.map +1 -0
- package/packages/core/dist/workflow/index.js +24 -0
- package/packages/core/dist/workflow/index.js.map +1 -0
- package/packages/core/dist/workflow/session-state.d.ts +92 -0
- package/packages/core/dist/workflow/session-state.d.ts.map +1 -0
- package/packages/core/dist/workflow/session-state.js +198 -0
- package/packages/core/dist/workflow/session-state.js.map +1 -0
- package/packages/core/dist/workflow/session-state.test.d.ts +8 -0
- package/packages/core/dist/workflow/session-state.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/session-state.test.js +551 -0
- package/packages/core/dist/workflow/session-state.test.js.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts +2 -2
- package/packages/core/dist/workflow/sm-subagents.test.js +6 -6
- package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -1
- package/packages/core/dist/workflow/step-parser.d.ts +45 -0
- package/packages/core/dist/workflow/step-parser.d.ts.map +1 -0
- package/packages/core/dist/workflow/step-parser.js +147 -0
- package/packages/core/dist/workflow/step-parser.js.map +1 -0
- package/packages/core/dist/workflow/step-parser.test.d.ts +14 -0
- package/packages/core/dist/workflow/step-parser.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/step-parser.test.js +470 -0
- package/packages/core/dist/workflow/step-parser.test.js.map +1 -0
- package/packages/core/dist/workflow/trimodal.d.ts +86 -0
- package/packages/core/dist/workflow/trimodal.d.ts.map +1 -0
- package/packages/core/dist/workflow/trimodal.js +118 -0
- package/packages/core/dist/workflow/trimodal.js.map +1 -0
- package/packages/core/dist/workflow/trimodal.test.d.ts +11 -0
- package/packages/core/dist/workflow/trimodal.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/trimodal.test.js +395 -0
- package/packages/core/dist/workflow/trimodal.test.js.map +1 -0
- package/packages/core/dist/workflow/variable-resolver.d.ts +67 -0
- package/packages/core/dist/workflow/variable-resolver.d.ts.map +1 -0
- package/packages/core/dist/workflow/variable-resolver.js +156 -0
- package/packages/core/dist/workflow/variable-resolver.js.map +1 -0
- package/packages/core/dist/workflow/variable-resolver.test.d.ts +14 -0
- package/packages/core/dist/workflow/variable-resolver.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/variable-resolver.test.js +400 -0
- package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-executor.d.ts +163 -0
- package/packages/core/dist/workflow/workflow-executor.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-executor.js +197 -0
- package/packages/core/dist/workflow/workflow-executor.js.map +1 -0
- package/packages/core/dist/workflow/workflow-executor.test.d.ts +8 -0
- package/packages/core/dist/workflow/workflow-executor.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-executor.test.js +444 -0
- package/packages/core/dist/workflow/workflow-executor.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.js +5 -5
- package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-migration.test.js +8 -9
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-permissions.d.ts +55 -0
- package/packages/core/dist/workflow/workflow-permissions.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-permissions.js +64 -0
- package/packages/core/dist/workflow/workflow-permissions.js.map +1 -0
- package/packages/core/dist/workflow/workflow-permissions.test.d.ts +15 -0
- package/packages/core/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-permissions.test.js +301 -0
- package/packages/core/dist/workflow/workflow-permissions.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +61 -2
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +293 -69
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.js +6 -6
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
- package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-stepped-schema.test.js +608 -0
- package/packages/core/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
- package/pennyfarthing-dist/agents/README.md +63 -134
- package/pennyfarthing-dist/agents/architect.md +18 -10
- package/pennyfarthing-dist/agents/dev.md +47 -32
- package/pennyfarthing-dist/agents/devops.md +18 -9
- package/pennyfarthing-dist/agents/handoff.md +289 -0
- package/pennyfarthing-dist/agents/orchestrator.md +44 -22
- package/pennyfarthing-dist/agents/pm.md +13 -8
- package/pennyfarthing-dist/agents/reviewer-preflight.md +42 -128
- package/pennyfarthing-dist/agents/reviewer.md +104 -57
- package/pennyfarthing-dist/agents/sm-file-summary.md +24 -75
- package/pennyfarthing-dist/agents/sm-finish.md +61 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +102 -54
- package/pennyfarthing-dist/agents/sm-setup.md +174 -0
- package/pennyfarthing-dist/agents/sm.md +223 -100
- package/pennyfarthing-dist/agents/tea.md +42 -34
- package/pennyfarthing-dist/agents/tech-writer.md +74 -6
- package/pennyfarthing-dist/agents/testing-runner.md +78 -360
- package/pennyfarthing-dist/agents/ux-designer.md +80 -7
- package/pennyfarthing-dist/agents/workflow-status-check.md +35 -299
- package/pennyfarthing-dist/commands/architect.md +2 -2
- package/pennyfarthing-dist/commands/close-epic.md +5 -2
- package/pennyfarthing-dist/commands/create-branches-from-story.md +7 -23
- package/pennyfarthing-dist/commands/dev.md +2 -2
- package/pennyfarthing-dist/commands/devops.md +3 -3
- package/pennyfarthing-dist/commands/git-cleanup.md +5 -5
- package/pennyfarthing-dist/commands/health-check.md +1 -1
- package/pennyfarthing-dist/commands/list-themes.md +7 -3
- package/pennyfarthing-dist/commands/orchestrator.md +2 -2
- package/pennyfarthing-dist/commands/parallel-work.md +4 -4
- package/pennyfarthing-dist/commands/pm.md +2 -2
- package/pennyfarthing-dist/commands/prime.md +7 -7
- package/pennyfarthing-dist/commands/release.md +1 -1
- package/pennyfarthing-dist/commands/repo-status.md +2 -2
- package/pennyfarthing-dist/commands/retro.md +2 -2
- package/pennyfarthing-dist/commands/reviewer.md +2 -2
- package/pennyfarthing-dist/commands/set-theme.md +5 -1
- package/pennyfarthing-dist/commands/sm.md +2 -2
- package/pennyfarthing-dist/commands/start-epic.md +26 -14
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +8 -8
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +1 -4
- package/pennyfarthing-dist/commands/tea.md +2 -2
- package/pennyfarthing-dist/commands/tech-writer.md +2 -2
- package/pennyfarthing-dist/commands/ux-designer.md +3 -3
- package/pennyfarthing-dist/commands/work.md +15 -4
- package/pennyfarthing-dist/commands/workflow.md +21 -0
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +15 -15
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +1 -1
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +4 -4
- package/pennyfarthing-dist/guides/agent-behavior.md +238 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +2 -2
- package/pennyfarthing-dist/guides/agent-template-tactical.md +4 -4
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +1 -1
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +17 -17
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +8 -8
- package/pennyfarthing-dist/guides/workflow-schema.md +62 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +5 -5
- package/pennyfarthing-dist/personas/themes/1984.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/a-team.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/arcane.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +2 -2
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/control.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +2 -2
- package/pennyfarthing-dist/personas/themes/discworld.yaml +2 -2
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/firefly.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/foundation.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/futurama.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +2 -2
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +2 -2
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/house-md.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/justified.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/mash.yaml +69 -66
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/rome.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/sandman.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-office.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +1 -1
- package/pennyfarthing-dist/scripts/README.md +68 -0
- package/pennyfarthing-dist/scripts/core/README.md +26 -0
- package/pennyfarthing-dist/scripts/{agent-session.sh → core/agent-session.sh} +34 -23
- package/pennyfarthing-dist/scripts/{check-context.sh → core/check-context.sh} +93 -37
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +90 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +136 -0
- package/pennyfarthing-dist/scripts/core/run.sh +75 -0
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
- package/pennyfarthing-dist/scripts/git/README.md +25 -0
- package/pennyfarthing-dist/scripts/{utils → git}/create-feature-branches.sh +11 -15
- package/pennyfarthing-dist/scripts/{utils → git}/git-status-all.sh +1 -1
- package/pennyfarthing-dist/scripts/{install-git-hooks.sh → git/install-git-hooks.sh} +0 -0
- package/pennyfarthing-dist/scripts/{release.sh → git/release.sh} +0 -0
- package/pennyfarthing-dist/scripts/{worktree-manager.sh → git/worktree-manager.sh} +0 -4
- package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -4
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +1 -2
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +1 -1
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +2 -3
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +2 -3
- package/pennyfarthing-dist/scripts/jira/README.md +33 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
- package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +327 -0
- package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +503 -0
- package/pennyfarthing-dist/scripts/{utils → jira}/jira-claim-story.sh +8 -6
- package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-lib.mjs +10 -10
- package/pennyfarthing-dist/scripts/{utils → jira}/jira-lib.sh +18 -17
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
- package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync-story.mjs +14 -14
- package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync-story.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync.mjs +4 -4
- package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +104 -0
- package/pennyfarthing-dist/scripts/{utils → jira}/sync-epic-to-jira.sh +1 -1
- package/pennyfarthing-dist/scripts/lib/README.md +29 -0
- package/pennyfarthing-dist/scripts/{utils → lib}/background-tasks.sh +1 -1
- package/pennyfarthing-dist/scripts/{utils → lib}/checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → lib}/common.sh +1 -1
- package/pennyfarthing-dist/scripts/{utils → lib}/file-lock.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → lib}/find-root.sh +7 -5
- package/pennyfarthing-dist/scripts/{utils → lib}/logging.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → lib}/retry.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/README.md +44 -0
- package/pennyfarthing-dist/scripts/{add-short-names.mjs → misc/add-short-names.mjs} +0 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/check-status.sh +4 -8
- package/pennyfarthing-dist/scripts/{deploy.sh → misc/deploy.sh} +0 -0
- package/pennyfarthing-dist/scripts/{doctor-dogfood.sh → misc/doctor-dogfood.sh} +2 -5
- package/pennyfarthing-dist/scripts/{utils → misc}/find-related-work.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/generate-skill-docs.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/log-skill-usage.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +474 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +9 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/repo-scan.sh +0 -0
- package/pennyfarthing-dist/scripts/{repo-utils.sh → misc/repo-utils.sh} +2 -2
- package/pennyfarthing-dist/scripts/{run-ci.sh → misc/run-ci.sh} +0 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/run-timestamp.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/session-cleanup.sh +0 -0
- package/pennyfarthing-dist/scripts/{utils → misc}/skill-usage-report.sh +0 -0
- package/pennyfarthing-dist/scripts/{statusline.sh → misc/statusline.sh} +2 -7
- package/pennyfarthing-dist/scripts/{uninstall.sh → misc/uninstall.sh} +4 -5
- package/pennyfarthing-dist/scripts/{utils → misc}/validate-subagent-frontmatter.sh +3 -3
- package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
- package/pennyfarthing-dist/scripts/sprint/archive-story.sh +135 -0
- package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
- package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
- package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
- package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
- package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
- package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
- package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +164 -0
- package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-common.sh +135 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
- package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-metrics.sh +0 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
- package/pennyfarthing-dist/scripts/story/README.md +23 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +159 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +198 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +162 -0
- package/pennyfarthing-dist/scripts/test/README.md +23 -0
- package/pennyfarthing-dist/scripts/{utils → test}/swebench-judge.py +0 -0
- package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
- package/pennyfarthing-dist/scripts/{utils → test}/test-setup.sh +5 -5
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -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 +7 -9
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +18 -18
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +10 -10
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +1 -1
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -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 +203 -0
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
- package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
- package/pennyfarthing-dist/scripts/{check.sh → workflow/check.sh} +0 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +91 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +6 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +2 -2
- package/pennyfarthing-dist/skills/code-review/SKILL.md +3 -3
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +6 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +56 -139
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +21 -5
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +1 -1
- package/pennyfarthing-dist/skills/jira/SKILL.md +381 -178
- package/pennyfarthing-dist/skills/judge/SKILL.md +76 -21
- package/pennyfarthing-dist/skills/just/SKILL.md +345 -102
- package/pennyfarthing-dist/skills/otel/skill.md +1 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +1 -1
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +5 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +5 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +22 -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 +104 -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 +390 -0
- package/pennyfarthing-dist/skills/theme/skill.md +1 -1
- 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 +337 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +1 -1
- package/pennyfarthing-dist/workflows/agent-docs.yaml +1 -1
- package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -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 +3 -1
- 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 +256 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.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 +27 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -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/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 +191 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -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 +177 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -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 +184 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
- package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
- package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -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/research/steps-domain/step-01-init.md +137 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -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 +54 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
- package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +1 -1
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
- package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
- package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.js +0 -256
- package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
- package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.js +0 -199
- package/packages/core/dist/scripts/generate-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.js +0 -301
- package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
- package/pennyfarthing-dist/agents/generic-handoff.md +0 -454
- package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
- package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
- package/pennyfarthing-dist/commands/new-work.md +0 -127
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
- package/pennyfarthing-dist/guides/persona-system.md +0 -294
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
- package/pennyfarthing-dist/guides/shared-context.md +0 -147
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
- package/pennyfarthing-dist/scripts/prime.sh +0 -161
- package/pennyfarthing-dist/scripts/run.sh +0 -65
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
- package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
- package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
- /package/pennyfarthing-dist/commands/{brainstorm.md → brainstorming.md} +0 -0
- /package/pennyfarthing-dist/scripts/{utils → test}/ground-truth-judge.py +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Jira vs YAML Reconciliation Report
|
|
3
|
+
# Usage: .pennyfarthing/scripts/core/run.sh jira/jira-reconcile.sh [--fix]
|
|
4
|
+
#
|
|
5
|
+
# Compares sprint YAML against Jira to find:
|
|
6
|
+
# - Status mismatches
|
|
7
|
+
# - Missing Jira keys
|
|
8
|
+
# - Orphan issues (in Jira but not YAML)
|
|
9
|
+
# - Sprint membership discrepancies
|
|
10
|
+
#
|
|
11
|
+
# Options:
|
|
12
|
+
# --fix Apply recommended fixes automatically (where safe)
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
# PROJECT_ROOT should be set by run.sh, but find it if not
|
|
17
|
+
if [[ -z "${PROJECT_ROOT:-}" ]]; then
|
|
18
|
+
d="$PWD"
|
|
19
|
+
while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
|
|
20
|
+
d="$(dirname "$d")"
|
|
21
|
+
done
|
|
22
|
+
PROJECT_ROOT="$d"
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
26
|
+
FIX_MODE="${1:-}"
|
|
27
|
+
|
|
28
|
+
# Colors for output
|
|
29
|
+
RED='\033[0;31m'
|
|
30
|
+
GREEN='\033[0;32m'
|
|
31
|
+
YELLOW='\033[1;33m'
|
|
32
|
+
NC='\033[0m' # No Color
|
|
33
|
+
|
|
34
|
+
# Check dependencies
|
|
35
|
+
if ! command -v yq &> /dev/null; then
|
|
36
|
+
echo "Error: yq is required but not installed"
|
|
37
|
+
echo "Install with: brew install yq"
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
if ! command -v jira &> /dev/null; then
|
|
42
|
+
echo "Error: jira CLI is required but not installed"
|
|
43
|
+
echo "Install with: brew install ankitpokhrel/jira/jira"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
if [[ ! -f "$SPRINT_FILE" ]]; then
|
|
48
|
+
echo "Error: Sprint file not found at $SPRINT_FILE"
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Get sprint info
|
|
53
|
+
SPRINT_NAME=$(yq eval '.sprint.name' "$SPRINT_FILE")
|
|
54
|
+
SPRINT_ID=$(yq eval '.sprint.jira_sprint_id' "$SPRINT_FILE")
|
|
55
|
+
|
|
56
|
+
echo "# Jira vs YAML Reconciliation Report"
|
|
57
|
+
echo ""
|
|
58
|
+
echo "**Sprint:** $SPRINT_NAME (Jira Sprint ID: $SPRINT_ID)"
|
|
59
|
+
echo "**Generated:** $(date '+%Y-%m-%d %H:%M')"
|
|
60
|
+
echo ""
|
|
61
|
+
|
|
62
|
+
# Track issues
|
|
63
|
+
STATUS_MISMATCHES=()
|
|
64
|
+
MISSING_JIRA=()
|
|
65
|
+
ORPHAN_ISSUES=()
|
|
66
|
+
NOT_IN_SPRINT=()
|
|
67
|
+
|
|
68
|
+
echo "## Checking YAML Stories Against Jira..."
|
|
69
|
+
echo ""
|
|
70
|
+
|
|
71
|
+
# Extract all stories from YAML and check against Jira
|
|
72
|
+
while IFS=$'\t' read -r yaml_id jira_key yaml_status title; do
|
|
73
|
+
# Skip if no jira key
|
|
74
|
+
if [[ "$jira_key" == "null" ]] || [[ -z "$jira_key" ]]; then
|
|
75
|
+
MISSING_JIRA+=("$yaml_id|$title|$yaml_status")
|
|
76
|
+
continue
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
# Get Jira status - use sed to remove the key prefix
|
|
80
|
+
jira_status=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,status --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "NOT_FOUND")
|
|
81
|
+
|
|
82
|
+
if [[ "$jira_status" == "NOT_FOUND" ]] || [[ -z "$jira_status" ]]; then
|
|
83
|
+
echo -e "${RED}[!]${NC} $jira_key not found in Jira"
|
|
84
|
+
continue
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Normalize statuses for comparison
|
|
88
|
+
jira_norm=$(echo "$jira_status" | tr '[:upper:]' '[:lower:]' | tr ' ' '_')
|
|
89
|
+
|
|
90
|
+
# Check for mismatches
|
|
91
|
+
mismatch=false
|
|
92
|
+
case "$yaml_status" in
|
|
93
|
+
done)
|
|
94
|
+
[[ "$jira_norm" != "done" ]] && mismatch=true
|
|
95
|
+
;;
|
|
96
|
+
ready|backlog)
|
|
97
|
+
[[ "$jira_norm" != "to_do" ]] && mismatch=true
|
|
98
|
+
;;
|
|
99
|
+
in_progress)
|
|
100
|
+
[[ "$jira_norm" != "in_progress" ]] && mismatch=true
|
|
101
|
+
;;
|
|
102
|
+
esac
|
|
103
|
+
|
|
104
|
+
if [[ "$mismatch" == "true" ]]; then
|
|
105
|
+
STATUS_MISMATCHES+=("$jira_key|$yaml_status|$jira_status")
|
|
106
|
+
fi
|
|
107
|
+
done < <(yq -r '.epics[].stories[]? | [.id, .jira, .status, .title] | @tsv' "$SPRINT_FILE" 2>/dev/null)
|
|
108
|
+
|
|
109
|
+
echo ""
|
|
110
|
+
echo "## Checking Jira Sprint Against YAML..."
|
|
111
|
+
echo ""
|
|
112
|
+
|
|
113
|
+
# Get all issues in the Jira sprint and check if they're in YAML
|
|
114
|
+
# Skip canceled issues - they're not relevant
|
|
115
|
+
while read -r jira_key; do
|
|
116
|
+
# Check if in YAML (by id or jira field)
|
|
117
|
+
in_yaml=$(yq -r ".epics[].stories[]? | select(.id == \"$jira_key\" or .jira == \"$jira_key\") | .id" "$SPRINT_FILE" 2>/dev/null | head -1)
|
|
118
|
+
|
|
119
|
+
if [[ -z "$in_yaml" ]]; then
|
|
120
|
+
# Get more info about the orphan
|
|
121
|
+
status=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,status --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "Unknown")
|
|
122
|
+
|
|
123
|
+
# Skip canceled issues
|
|
124
|
+
if [[ "$status" == "Canceled" ]]; then
|
|
125
|
+
continue
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
summary=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,summary --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "Unknown")
|
|
129
|
+
ORPHAN_ISSUES+=("$jira_key|$status|$summary")
|
|
130
|
+
fi
|
|
131
|
+
done < <(jira issue list --jql "project=MSSCI AND labels=pennyfarthing AND sprint=$SPRINT_ID AND status != Canceled" --plain --columns key --no-headers 2>/dev/null)
|
|
132
|
+
|
|
133
|
+
echo ""
|
|
134
|
+
echo "## Checking for Issues Not in Sprint..."
|
|
135
|
+
echo ""
|
|
136
|
+
|
|
137
|
+
# Get done issues not in sprint
|
|
138
|
+
while read -r jira_key; do
|
|
139
|
+
# Check if it should be in current sprint (exists in YAML)
|
|
140
|
+
in_yaml=$(yq -r ".epics[].stories[]? | select(.id == \"$jira_key\" or .jira == \"$jira_key\") | .id" "$SPRINT_FILE" 2>/dev/null | head -1)
|
|
141
|
+
|
|
142
|
+
if [[ -n "$in_yaml" ]]; then
|
|
143
|
+
summary=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns summary --no-headers 2>/dev/null | xargs || echo "Unknown")
|
|
144
|
+
NOT_IN_SPRINT+=("$jira_key|$summary")
|
|
145
|
+
fi
|
|
146
|
+
done < <(jira issue list --jql "project=MSSCI AND labels=pennyfarthing AND sprint is EMPTY AND status != Canceled" --plain --columns key --no-headers 2>/dev/null)
|
|
147
|
+
|
|
148
|
+
# Output Report
|
|
149
|
+
echo ""
|
|
150
|
+
echo "---"
|
|
151
|
+
echo ""
|
|
152
|
+
echo "# Summary"
|
|
153
|
+
echo ""
|
|
154
|
+
|
|
155
|
+
# Status Mismatches
|
|
156
|
+
echo "## Status Mismatches (${#STATUS_MISMATCHES[@]})"
|
|
157
|
+
echo ""
|
|
158
|
+
if [[ ${#STATUS_MISMATCHES[@]} -eq 0 ]]; then
|
|
159
|
+
echo -e "${GREEN}No status mismatches found.${NC}"
|
|
160
|
+
else
|
|
161
|
+
echo "| Jira Key | YAML Status | Jira Status | Action |"
|
|
162
|
+
echo "|----------|-------------|-------------|--------|"
|
|
163
|
+
for item in "${STATUS_MISMATCHES[@]}"; do
|
|
164
|
+
IFS='|' read -r key yaml jira <<< "$item"
|
|
165
|
+
echo "| $key | $yaml | $jira | Update YAML or Jira |"
|
|
166
|
+
done
|
|
167
|
+
fi
|
|
168
|
+
echo ""
|
|
169
|
+
|
|
170
|
+
# Missing Jira Keys
|
|
171
|
+
echo "## YAML Stories Missing Jira Key (${#MISSING_JIRA[@]})"
|
|
172
|
+
echo ""
|
|
173
|
+
if [[ ${#MISSING_JIRA[@]} -eq 0 ]]; then
|
|
174
|
+
echo -e "${GREEN}All YAML stories have Jira keys.${NC}"
|
|
175
|
+
else
|
|
176
|
+
echo "| YAML ID | Title | Status | Action |"
|
|
177
|
+
echo "|---------|-------|--------|--------|"
|
|
178
|
+
for item in "${MISSING_JIRA[@]}"; do
|
|
179
|
+
IFS='|' read -r id title status <<< "$item"
|
|
180
|
+
echo "| $id | ${title:0:40} | $status | Create Jira issue |"
|
|
181
|
+
done
|
|
182
|
+
fi
|
|
183
|
+
echo ""
|
|
184
|
+
|
|
185
|
+
# Orphan Issues
|
|
186
|
+
echo "## Jira Issues Not in YAML (${#ORPHAN_ISSUES[@]})"
|
|
187
|
+
echo ""
|
|
188
|
+
if [[ ${#ORPHAN_ISSUES[@]} -eq 0 ]]; then
|
|
189
|
+
echo -e "${GREEN}All sprint issues are tracked in YAML.${NC}"
|
|
190
|
+
else
|
|
191
|
+
echo "| Jira Key | Status | Summary | Action |"
|
|
192
|
+
echo "|----------|--------|---------|--------|"
|
|
193
|
+
for item in "${ORPHAN_ISSUES[@]}"; do
|
|
194
|
+
IFS='|' read -r key status summary <<< "$item"
|
|
195
|
+
if [[ "$status" == "Done" ]]; then
|
|
196
|
+
echo "| $key | $status | ${summary:0:40} | Info: Completed (not in current YAML) |"
|
|
197
|
+
else
|
|
198
|
+
echo "| $key | $status | ${summary:0:40} | Add to YAML or remove from sprint |"
|
|
199
|
+
fi
|
|
200
|
+
done
|
|
201
|
+
echo ""
|
|
202
|
+
echo "*Note: Done issues not in YAML are historical - they count toward sprint velocity but aren't actively tracked.*"
|
|
203
|
+
fi
|
|
204
|
+
echo ""
|
|
205
|
+
|
|
206
|
+
# Not in Sprint
|
|
207
|
+
echo "## YAML Stories Not in Jira Sprint (${#NOT_IN_SPRINT[@]})"
|
|
208
|
+
echo ""
|
|
209
|
+
if [[ ${#NOT_IN_SPRINT[@]} -eq 0 ]]; then
|
|
210
|
+
echo -e "${GREEN}All YAML stories are in Jira sprint.${NC}"
|
|
211
|
+
else
|
|
212
|
+
echo "| Jira Key | Summary | Action |"
|
|
213
|
+
echo "|----------|---------|--------|"
|
|
214
|
+
for item in "${NOT_IN_SPRINT[@]}"; do
|
|
215
|
+
IFS='|' read -r key summary <<< "$item"
|
|
216
|
+
echo "| $key | ${summary:0:50} | Add to sprint $SPRINT_ID |"
|
|
217
|
+
done
|
|
218
|
+
fi
|
|
219
|
+
echo ""
|
|
220
|
+
|
|
221
|
+
# Epic check
|
|
222
|
+
echo "## Epic Sync Check"
|
|
223
|
+
echo ""
|
|
224
|
+
echo "| YAML Epic ID | Jira Field | Status |"
|
|
225
|
+
echo "|--------------|------------|--------|"
|
|
226
|
+
while IFS=$'\t' read -r epic_id jira_key title; do
|
|
227
|
+
if [[ "$jira_key" == "null" ]] || [[ -z "$jira_key" ]]; then
|
|
228
|
+
echo -e "| $epic_id | ${RED}MISSING${NC} | $title |"
|
|
229
|
+
else
|
|
230
|
+
echo "| $epic_id | $jira_key | $title |"
|
|
231
|
+
fi
|
|
232
|
+
done < <(yq -r '.epics[] | [.id, .jira, .title] | @tsv' "$SPRINT_FILE" 2>/dev/null)
|
|
233
|
+
echo ""
|
|
234
|
+
|
|
235
|
+
# Total counts
|
|
236
|
+
total_issues=$((${#STATUS_MISMATCHES[@]} + ${#MISSING_JIRA[@]} + ${#ORPHAN_ISSUES[@]} + ${#NOT_IN_SPRINT[@]}))
|
|
237
|
+
|
|
238
|
+
echo "---"
|
|
239
|
+
echo ""
|
|
240
|
+
if [[ $total_issues -eq 0 ]]; then
|
|
241
|
+
echo -e "${GREEN}Sync Status: CLEAN${NC} - No discrepancies found!"
|
|
242
|
+
else
|
|
243
|
+
echo -e "${YELLOW}Sync Status: $total_issues issue(s) found${NC}"
|
|
244
|
+
echo ""
|
|
245
|
+
echo "Run with --fix to apply automatic fixes where possible."
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
# Fix mode
|
|
249
|
+
if [[ "$FIX_MODE" == "--fix" ]]; then
|
|
250
|
+
echo ""
|
|
251
|
+
echo "## Applying Fixes..."
|
|
252
|
+
echo ""
|
|
253
|
+
|
|
254
|
+
# Add stories to sprint
|
|
255
|
+
for item in "${NOT_IN_SPRINT[@]}"; do
|
|
256
|
+
IFS='|' read -r key summary <<< "$item"
|
|
257
|
+
echo "Adding $key to sprint $SPRINT_ID..."
|
|
258
|
+
jira sprint add "$SPRINT_ID" "$key" 2>/dev/null && echo " Done" || echo " Failed"
|
|
259
|
+
done
|
|
260
|
+
|
|
261
|
+
echo ""
|
|
262
|
+
echo "Fix mode completed. Manual review still needed for:"
|
|
263
|
+
echo "- Status mismatches (requires decision on which source is correct)"
|
|
264
|
+
echo "- Missing Jira keys (requires creating new issues)"
|
|
265
|
+
echo "- Orphan issues (requires adding to YAML or removing from sprint)"
|
|
266
|
+
fi
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Usage: node jira-sync-story.mjs <story_key> [--transition] [--points] [--comment "message"]
|
|
6
6
|
*
|
|
7
7
|
* Options:
|
|
8
|
-
* --transition Transition story to match
|
|
9
|
-
* --points Sync story points from
|
|
8
|
+
* --transition Transition story to match Pennyfarthing status
|
|
9
|
+
* --points Sync story points from Pennyfarthing to Jira
|
|
10
10
|
* --comment Add a comment to the story
|
|
11
11
|
*/
|
|
12
12
|
|
|
@@ -93,8 +93,8 @@ if (!story) {
|
|
|
93
93
|
process.exit(1);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
// Get story details from
|
|
97
|
-
const
|
|
96
|
+
// Get story details from Pennyfarthing
|
|
97
|
+
const PennyfarthingStatus = story.status || 'backlog';
|
|
98
98
|
const storyJira = story.jira;
|
|
99
99
|
const storyBranch = story.branch;
|
|
100
100
|
const storyPr = story.pr;
|
|
@@ -131,15 +131,15 @@ const jiraPoints = getStoryPoints(jiraKey, issueJson);
|
|
|
131
131
|
console.log(` Summary: ${jiraSummary}`);
|
|
132
132
|
console.log(` Jira Status: ${jiraStatus}`);
|
|
133
133
|
console.log(` Assignee: ${jiraAssignee}`);
|
|
134
|
-
console.log(`
|
|
135
|
-
if (storyPoints) console.log(`
|
|
134
|
+
console.log(` Pennyfarthing Status: ${PennyfarthingStatus}`);
|
|
135
|
+
if (storyPoints) console.log(` Pennyfarthing Points: ${storyPoints}`);
|
|
136
136
|
if (jiraPoints) console.log(` Jira Points: ${jiraPoints}`);
|
|
137
137
|
if (storyBranch) console.log(` Branch: ${storyBranch}`);
|
|
138
138
|
if (storyPr) console.log(` PR: ${storyPr}`);
|
|
139
139
|
console.log('');
|
|
140
140
|
|
|
141
|
-
// Map
|
|
142
|
-
const targetJiraStatus = mapStatusToJira(
|
|
141
|
+
// Map Pennyfarthing status to target Jira status
|
|
142
|
+
const targetJiraStatus = mapStatusToJira(PennyfarthingStatus);
|
|
143
143
|
|
|
144
144
|
// Transition if requested
|
|
145
145
|
if (doTransition) {
|
|
@@ -186,13 +186,13 @@ if (commentText) {
|
|
|
186
186
|
if (doTransition && !commentText) {
|
|
187
187
|
let autoComment = null;
|
|
188
188
|
|
|
189
|
-
if (
|
|
190
|
-
autoComment = `**Development Started**\n\nBranch: \`${storyBranch}\`\n\nSynced from
|
|
191
|
-
} else if (
|
|
192
|
-
autoComment = `**Ready for Review**\n\nPR: ${storyPr}\n\nSynced from
|
|
193
|
-
} else if (
|
|
189
|
+
if (PennyfarthingStatus === 'in-progress' && storyBranch) {
|
|
190
|
+
autoComment = `**Development Started**\n\nBranch: \`${storyBranch}\`\n\nSynced from Pennyfarthing`;
|
|
191
|
+
} else if (PennyfarthingStatus === 'review' && storyPr) {
|
|
192
|
+
autoComment = `**Ready for Review**\n\nPR: ${storyPr}\n\nSynced from Pennyfarthing`;
|
|
193
|
+
} else if (PennyfarthingStatus === 'done') {
|
|
194
194
|
const today = new Date().toISOString().split('T')[0];
|
|
195
|
-
autoComment = `**Completed**\n\nSynced from
|
|
195
|
+
autoComment = `**Completed**\n\nSynced from Pennyfarthing on ${today}`;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
if (autoComment) {
|
|
File without changes
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* jira-sync.mjs - Sync
|
|
3
|
+
* jira-sync.mjs - Sync Pennyfarthing Epic to Jira
|
|
4
4
|
*
|
|
5
5
|
* Usage: node jira-sync.mjs <epic_number> [--dry-run] [--transition] [--points]
|
|
6
6
|
*
|
|
7
7
|
* Options:
|
|
8
8
|
* --dry-run Show what would be done without making changes
|
|
9
|
-
* --transition Transition Jira issues to match
|
|
10
|
-
* --points Sync story points from
|
|
9
|
+
* --transition Transition Jira issues to match Pennyfarthing status
|
|
10
|
+
* --points Sync story points from Pennyfarthing to Jira
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import {
|
|
@@ -154,7 +154,7 @@ for (const story of stories) {
|
|
|
154
154
|
const targetStatus = mapStatusToJira(storyStatus);
|
|
155
155
|
|
|
156
156
|
console.log(` Jira Status: ${jiraStatus} (target: ${targetStatus})`);
|
|
157
|
-
if (storyPoints) console.log(` Points:
|
|
157
|
+
if (storyPoints) console.log(` Points: Pennyfarthing=${storyPoints}, Jira=${jiraPoints || 'unset'}`);
|
|
158
158
|
|
|
159
159
|
// Transition if requested
|
|
160
160
|
if (doTransition) {
|
|
File without changes
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Sync an epic and its stories to Jira
|
|
3
|
+
# Usage: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh <epic-id> [--dry-run] [--transition] [--points] [--all]
|
|
4
|
+
#
|
|
5
|
+
# Example: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh MSSCI-11952
|
|
6
|
+
# Example: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh MSSCI-11952 --all
|
|
7
|
+
#
|
|
8
|
+
# This script syncs status and story points from sprint YAML to Jira.
|
|
9
|
+
# It wraps the existing jira-sync.mjs for better integration with /sprint skill.
|
|
10
|
+
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
EPIC_ID="${1:-}"
|
|
14
|
+
|
|
15
|
+
if [[ -z "$EPIC_ID" ]]; then
|
|
16
|
+
echo "Usage: sync-epic-jira.sh <epic-id> [options]"
|
|
17
|
+
echo ""
|
|
18
|
+
echo "Syncs an epic and its stories from sprint YAML to Jira."
|
|
19
|
+
echo ""
|
|
20
|
+
echo "Options:"
|
|
21
|
+
echo " --dry-run Show what would be done without making changes"
|
|
22
|
+
echo " --transition Transition Jira issues to match sprint YAML status"
|
|
23
|
+
echo " --points Sync story points from sprint YAML to Jira"
|
|
24
|
+
echo " --all Equivalent to --transition --points"
|
|
25
|
+
echo ""
|
|
26
|
+
echo "Examples:"
|
|
27
|
+
echo " sync-epic-jira.sh MSSCI-11952 # Show sync status"
|
|
28
|
+
echo " sync-epic-jira.sh MSSCI-11952 --dry-run # Preview changes"
|
|
29
|
+
echo " sync-epic-jira.sh MSSCI-11952 --all # Sync status and points"
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# PROJECT_ROOT should be set by run.sh, but find it if not
|
|
34
|
+
if [[ -z "${PROJECT_ROOT:-}" ]]; then
|
|
35
|
+
d="$PWD"
|
|
36
|
+
while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
|
|
37
|
+
d="$(dirname "$d")"
|
|
38
|
+
done
|
|
39
|
+
PROJECT_ROOT="$d"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
43
|
+
|
|
44
|
+
if [[ ! -f "$SPRINT_FILE" ]]; then
|
|
45
|
+
echo "Error: Sprint file not found at $SPRINT_FILE"
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
if ! command -v yq &> /dev/null; then
|
|
50
|
+
echo "Error: yq is required but not installed"
|
|
51
|
+
echo "Install with: brew install yq"
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Check if epic exists in sprint YAML
|
|
56
|
+
EPIC_EXISTS=$(yq ".epics[] | select(.id == \"$EPIC_ID\") | .id" "$SPRINT_FILE" 2>/dev/null || echo "")
|
|
57
|
+
|
|
58
|
+
if [[ -z "$EPIC_EXISTS" ]]; then
|
|
59
|
+
echo "Error: Epic $EPIC_ID not found in $SPRINT_FILE"
|
|
60
|
+
echo ""
|
|
61
|
+
echo "Available epics:"
|
|
62
|
+
yq '.epics[].id' "$SPRINT_FILE" 2>/dev/null || echo " None found"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Extract epic number for jira-sync.mjs compatibility
|
|
67
|
+
# jira-sync.mjs expects epic number (e.g., 35) not full ID
|
|
68
|
+
# But it also accepts Jira keys directly
|
|
69
|
+
# Let's check if this is a Jira key (MSSCI-XXXXX) or local ID
|
|
70
|
+
|
|
71
|
+
# Pass through to jira-sync.mjs with remaining arguments
|
|
72
|
+
JIRA_SYNC_SCRIPT="$PROJECT_ROOT/.pennyfarthing/scripts/utils/jira/jira-sync.mjs"
|
|
73
|
+
|
|
74
|
+
if [[ ! -f "$JIRA_SYNC_SCRIPT" ]]; then
|
|
75
|
+
# Try alternate location
|
|
76
|
+
JIRA_SYNC_SCRIPT="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs"
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
if [[ ! -f "$JIRA_SYNC_SCRIPT" ]]; then
|
|
80
|
+
echo "Error: jira-sync.mjs not found"
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# Build arguments for jira-sync.mjs
|
|
85
|
+
shift # Remove epic-id from arguments
|
|
86
|
+
SYNC_ARGS=("$EPIC_ID")
|
|
87
|
+
|
|
88
|
+
# Handle --all flag
|
|
89
|
+
for arg in "$@"; do
|
|
90
|
+
case "$arg" in
|
|
91
|
+
--all)
|
|
92
|
+
SYNC_ARGS+=("--transition" "--points")
|
|
93
|
+
;;
|
|
94
|
+
*)
|
|
95
|
+
SYNC_ARGS+=("$arg")
|
|
96
|
+
;;
|
|
97
|
+
esac
|
|
98
|
+
done
|
|
99
|
+
|
|
100
|
+
echo "Syncing epic $EPIC_ID to Jira..."
|
|
101
|
+
echo ""
|
|
102
|
+
|
|
103
|
+
# Run jira-sync.mjs
|
|
104
|
+
exec node "$JIRA_SYNC_SCRIPT" "${SYNC_ARGS[@]}"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Library Scripts
|
|
2
|
+
|
|
3
|
+
Shared bash libraries sourced by other scripts.
|
|
4
|
+
|
|
5
|
+
## Libraries
|
|
6
|
+
|
|
7
|
+
| Script | Purpose |
|
|
8
|
+
|--------|---------|
|
|
9
|
+
| `common.sh` | Common utilities (colors, logging basics) |
|
|
10
|
+
| `logging.sh` | Structured logging functions |
|
|
11
|
+
| `retry.sh` | Retry logic with exponential backoff |
|
|
12
|
+
| `checkpoint.sh` | Checkpointing for long-running operations |
|
|
13
|
+
| `file-lock.sh` | File locking utilities |
|
|
14
|
+
| `background-tasks.sh` | Background task management |
|
|
15
|
+
| `find-root.sh` | Project root finder |
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
These are sourced by other scripts, not run directly:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
source "$SCRIPTS_DIR/lib/common.sh"
|
|
23
|
+
source "$SCRIPTS_DIR/lib/logging.sh"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Ownership
|
|
27
|
+
|
|
28
|
+
- **Primary users:** All scripts
|
|
29
|
+
- **Maintained by:** Core Pennyfarthing team
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Background task tracking utilities for session files
|
|
3
3
|
#
|
|
4
4
|
# Usage:
|
|
5
|
-
# source $CLAUDE_PROJECT_DIR/scripts/
|
|
5
|
+
# source $CLAUDE_PROJECT_DIR/scripts/lib/background-tasks.sh
|
|
6
6
|
#
|
|
7
7
|
# Functions:
|
|
8
8
|
# bg_task_add <session_file> <task_id> <subagent_type> <description>
|
|
File without changes
|
|
File without changes
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env zsh
|
|
2
2
|
# Shared utility: Find project root by .claude/ marker
|
|
3
|
-
# Source this file to get PROJECT_ROOT set correctly
|
|
4
3
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
4
|
+
# DEPRECATED: Scripts invoked via run.sh already have PROJECT_ROOT set.
|
|
5
|
+
# This file is kept for backwards compatibility with scripts that may be
|
|
6
|
+
# run directly (not via run.sh).
|
|
7
7
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
8
|
+
# When run.sh executes a script, it sets PROJECT_ROOT before exec'ing,
|
|
9
|
+
# so sourcing this file is a no-op (line 12 skips if already set).
|
|
10
|
+
#
|
|
11
|
+
# For new scripts: Just assume PROJECT_ROOT is set by the caller (run.sh).
|
|
10
12
|
|
|
11
13
|
# Skip if PROJECT_ROOT is already set (e.g., by run.sh or CLAUDE_PROJECT_DIR)
|
|
12
14
|
if [ -z "${PROJECT_ROOT:-}" ]; then
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Miscellaneous Scripts
|
|
2
|
+
|
|
3
|
+
Uncategorized utilities and one-off scripts.
|
|
4
|
+
|
|
5
|
+
## Scripts
|
|
6
|
+
|
|
7
|
+
| Script | Purpose |
|
|
8
|
+
|--------|---------|
|
|
9
|
+
| `deploy.sh` | Deployment script |
|
|
10
|
+
| `doctor-dogfood.sh` | Health check for dogfooding setup |
|
|
11
|
+
| `run-ci.sh` | Run CI locally |
|
|
12
|
+
| `statusline.sh` | Status line configuration |
|
|
13
|
+
| `uninstall.sh` | Uninstall Pennyfarthing from project |
|
|
14
|
+
| `backlog.sh` | Backlog operations |
|
|
15
|
+
| `repo-utils.sh` | Multi-repo utilities |
|
|
16
|
+
| `repo-scan.sh` | Repository scanner |
|
|
17
|
+
| `add-short-names.mjs` | Add short names to themes |
|
|
18
|
+
| `migrate-bmad-workflow.mjs` | BMAD workflow migration |
|
|
19
|
+
| `migrate-bmad-workflow.sh` | BMAD migration wrapper |
|
|
20
|
+
| `find-related-work.sh` | Find related work items |
|
|
21
|
+
| `check-status.sh` | Status checking utilities |
|
|
22
|
+
| `session-cleanup.sh` | Clean up old sessions |
|
|
23
|
+
| `generate-skill-docs.sh` | Generate skill documentation |
|
|
24
|
+
| `log-skill-usage.sh` | Log skill invocations |
|
|
25
|
+
| `skill-usage-report.sh` | Generate skill usage reports |
|
|
26
|
+
| `run-timestamp.sh` | Timestamp utility |
|
|
27
|
+
| `validate-subagent-frontmatter.sh` | Validate subagent YAML frontmatter |
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
.pennyfarthing/scripts/core/run.sh misc/doctor-dogfood.sh
|
|
33
|
+
.pennyfarthing/scripts/core/run.sh misc/run-ci.sh
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Ownership
|
|
37
|
+
|
|
38
|
+
- **Primary users:** Various
|
|
39
|
+
- **Maintained by:** Core Pennyfarthing team
|
|
40
|
+
|
|
41
|
+
## Note
|
|
42
|
+
|
|
43
|
+
Scripts here may be candidates for moving to more specific categories
|
|
44
|
+
as the codebase evolves.
|
|
File without changes
|