@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
|
@@ -1,454 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: generic-handoff
|
|
3
|
-
description: Workflow-driven handoff that reads phase requirements from workflow definition
|
|
4
|
-
tools: Bash, Read, Edit, Grep
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
You are a workflow-driven handoff assistant. Complete the handoff for story {STORY_ID}.
|
|
8
|
-
|
|
9
|
-
## Parameters (provided by calling agent)
|
|
10
|
-
|
|
11
|
-
| Param | Required | Description |
|
|
12
|
-
|-------|----------|-------------|
|
|
13
|
-
| `STORY_ID` | Yes | Story identifier (e.g., "31-10") |
|
|
14
|
-
| `WORKFLOW` | Yes | Workflow name (e.g., "tdd", "trivial") |
|
|
15
|
-
| `CURRENT_PHASE` | Yes | Current phase name (e.g., "red", "green", "review") |
|
|
16
|
-
| `REPOS` | Yes | Repository or "pennyfarthing" |
|
|
17
|
-
| `SESSION_FILE` | No | Defaults to `.session/{STORY_ID}-session.md` |
|
|
18
|
-
| `VERDICT` | No | For review phase: "approved" or "rejected" |
|
|
19
|
-
| `TEST_RESULT` | No | For test gates: "RED" or "GREEN" |
|
|
20
|
-
| `ASSESSMENT_SECTION` | No | Section name to verify exists (e.g., "TEA Assessment") |
|
|
21
|
-
| `PR_NUMBER` | No | For green→review: PR number to verify |
|
|
22
|
-
| `BRANCH` | No | Feature branch name |
|
|
23
|
-
|
|
24
|
-
## Workflow-Driven Logic
|
|
25
|
-
|
|
26
|
-
This handoff uses the CLI wrapper (`scripts/generic-handoff-cli.sh`) which calls the
|
|
27
|
-
TypeScript implementation in `packages/core/src/workflow/generic-handoff.ts`.
|
|
28
|
-
|
|
29
|
-
**Key operations:**
|
|
30
|
-
1. Check gate conditions: `./scripts/generic-handoff-cli.sh check-gate`
|
|
31
|
-
2. Find next phase: `./scripts/generic-handoff-cli.sh next-phase`
|
|
32
|
-
3. Format transitions: `./scripts/generic-handoff-cli.sh format-transition`
|
|
33
|
-
|
|
34
|
-
**Gate types:**
|
|
35
|
-
- `tests_fail` - Tests must be RED (TEA → Dev)
|
|
36
|
-
- `tests_pass` - Tests must be GREEN (Dev → Reviewer)
|
|
37
|
-
- `approval` - Requires APPROVED or REJECTED verdict (Reviewer → SM/Dev)
|
|
38
|
-
- `manual` - No checks required, always passes (SM setup/finish)
|
|
39
|
-
- `(none)` - Phases without gates are treated as `manual` (always pass)
|
|
40
|
-
|
|
41
|
-
### Step 1: Find Current Phase and Gate Type
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# Get current phase details including gate type
|
|
45
|
-
./scripts/generic-handoff-cli.sh find-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Returns JSON with phase name, agent, and gate type (or null if no gate).
|
|
49
|
-
|
|
50
|
-
### Step 2: Verify Assessment Exists
|
|
51
|
-
|
|
52
|
-
If ASSESSMENT_SECTION is provided:
|
|
53
|
-
```bash
|
|
54
|
-
SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
|
|
55
|
-
grep -q "## {ASSESSMENT_SECTION}" "$SESSION_FILE"
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
If NOT found: **STOP** with "Assessment not written. Agent must write {ASSESSMENT_SECTION} before handoff."
|
|
59
|
-
|
|
60
|
-
### Step 3: Gate-Specific Pre-Flight Verification
|
|
61
|
-
|
|
62
|
-
Based on the gate type from the workflow, run the appropriate checks.
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Gate Type: `tests_fail` (RED phase - TEA → Dev)
|
|
67
|
-
|
|
68
|
-
### Pre-Flight Checks
|
|
69
|
-
|
|
70
|
-
1. **Tests are committed:**
|
|
71
|
-
```bash
|
|
72
|
-
cd $CLAUDE_PROJECT_DIR && git log -1 --oneline
|
|
73
|
-
```
|
|
74
|
-
Should show recent test commit.
|
|
75
|
-
|
|
76
|
-
2. **Tests are RED (failing as expected):**
|
|
77
|
-
|
|
78
|
-
First check test cache (Story 31-8):
|
|
79
|
-
```bash
|
|
80
|
-
SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
|
|
81
|
-
CURRENT_SHA=$(cd $CLAUDE_PROJECT_DIR && git rev-parse HEAD)
|
|
82
|
-
|
|
83
|
-
if grep -q "^## Test Cache" "$SESSION_FILE" 2>/dev/null; then
|
|
84
|
-
CACHE_SHA=$(grep "| Git SHA |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
85
|
-
if [[ "$CACHE_SHA" == "$CURRENT_SHA" ]]; then
|
|
86
|
-
CACHE_RESULT=$(grep "| Result |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
87
|
-
CACHE_TIME=$(grep "| Last Run |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
88
|
-
CACHE_EPOCH=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$CACHE_TIME" +%s 2>/dev/null || date -d "$CACHE_TIME" +%s 2>/dev/null || echo 0)
|
|
89
|
-
NOW_EPOCH=$(date +%s)
|
|
90
|
-
AGE_MINUTES=$(( (NOW_EPOCH - CACHE_EPOCH) / 60 ))
|
|
91
|
-
|
|
92
|
-
if [[ $AGE_MINUTES -lt 5 ]]; then
|
|
93
|
-
echo "Using cached test result: $CACHE_RESULT (${AGE_MINUTES}m old)"
|
|
94
|
-
if [[ "$CACHE_RESULT" == "RED" ]]; then
|
|
95
|
-
echo "✓ Tests are RED (cached) - ready for Dev"
|
|
96
|
-
else
|
|
97
|
-
echo "✗ Tests are GREEN - should be RED. STOP."
|
|
98
|
-
fi
|
|
99
|
-
fi
|
|
100
|
-
fi
|
|
101
|
-
fi
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
If no valid cache or TEST_RESULT not provided, delegate to testing-runner:
|
|
105
|
-
```yaml
|
|
106
|
-
Task tool:
|
|
107
|
-
subagent_type: "general-purpose"
|
|
108
|
-
model: "haiku"
|
|
109
|
-
prompt: |
|
|
110
|
-
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
111
|
-
|
|
112
|
-
REPOS: {REPOS}
|
|
113
|
-
CONTEXT: TEA handoff - verify tests are RED
|
|
114
|
-
RUN_ID: {STORY_ID}-tea-handoff
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**STOP if tests are GREEN** - TEA must verify tests exercise new functionality.
|
|
118
|
-
|
|
119
|
-
### Session Update for tests_fail
|
|
120
|
-
|
|
121
|
-
Add to session file:
|
|
122
|
-
- TEA handoff summary
|
|
123
|
-
- Test count (failing/passing)
|
|
124
|
-
- Session log entry with test commit SHA
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Gate Type: `tests_pass` (GREEN phase - Dev → Reviewer)
|
|
129
|
-
|
|
130
|
-
### Pre-Flight Checks
|
|
131
|
-
|
|
132
|
-
Run ALL checks and STOP if any fail:
|
|
133
|
-
|
|
134
|
-
1. **Quality gate checks pass:**
|
|
135
|
-
|
|
136
|
-
First check test cache (Story 31-8):
|
|
137
|
-
```bash
|
|
138
|
-
SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
|
|
139
|
-
CURRENT_SHA=$(cd $CLAUDE_PROJECT_DIR && git rev-parse HEAD)
|
|
140
|
-
|
|
141
|
-
USE_CACHED_TESTS=false
|
|
142
|
-
if grep -q "^## Test Cache" "$SESSION_FILE" 2>/dev/null; then
|
|
143
|
-
CACHE_SHA=$(grep "| Git SHA |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
144
|
-
CACHE_RESULT=$(grep "| Result |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
145
|
-
CACHE_TIME=$(grep "| Last Run |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
|
|
146
|
-
|
|
147
|
-
if [[ "$CACHE_SHA" == "$CURRENT_SHA" ]]; then
|
|
148
|
-
CACHE_EPOCH=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$CACHE_TIME" +%s 2>/dev/null || date -d "$CACHE_TIME" +%s 2>/dev/null || echo 0)
|
|
149
|
-
NOW_EPOCH=$(date +%s)
|
|
150
|
-
AGE_MINUTES=$(( (NOW_EPOCH - CACHE_EPOCH) / 60 ))
|
|
151
|
-
|
|
152
|
-
if [[ $AGE_MINUTES -lt 5 ]]; then
|
|
153
|
-
echo "✓ Using cached test result: $CACHE_RESULT (${AGE_MINUTES}m old)"
|
|
154
|
-
if [[ "$CACHE_RESULT" == "GREEN" ]]; then
|
|
155
|
-
echo "✓ Tests passed (cached) - skipping redundant run"
|
|
156
|
-
USE_CACHED_TESTS=true
|
|
157
|
-
elif [[ "$CACHE_RESULT" == "RED" ]]; then
|
|
158
|
-
echo "✗ Cached tests show failures - STOP"
|
|
159
|
-
# Report failure, don't proceed
|
|
160
|
-
fi
|
|
161
|
-
fi
|
|
162
|
-
fi
|
|
163
|
-
fi
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
If cache valid and GREEN, skip test execution. Otherwise run full quality gate:
|
|
167
|
-
```bash
|
|
168
|
-
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh
|
|
169
|
-
```
|
|
170
|
-
If exit code non-zero: **STOP** - "Quality checks failed. Dev must fix issues before handoff."
|
|
171
|
-
|
|
172
|
-
2. **Git working tree is clean:**
|
|
173
|
-
```bash
|
|
174
|
-
git status --porcelain
|
|
175
|
-
```
|
|
176
|
-
Should be empty. If not: **STOP** - "Uncommitted changes. Dev must commit first."
|
|
177
|
-
|
|
178
|
-
3. **Changes pushed to remote:**
|
|
179
|
-
```bash
|
|
180
|
-
git log origin/{BRANCH}..HEAD --oneline
|
|
181
|
-
```
|
|
182
|
-
Should be empty. If not: **STOP** - "Unpushed commits. Dev must push first."
|
|
183
|
-
|
|
184
|
-
4. **PR exists and is open:**
|
|
185
|
-
```bash
|
|
186
|
-
gh pr view {PR_NUMBER} --json state
|
|
187
|
-
```
|
|
188
|
-
Should show "OPEN". If not: **STOP** - "PR not found or not open."
|
|
189
|
-
|
|
190
|
-
### Session Update for tests_pass
|
|
191
|
-
|
|
192
|
-
Add to session file:
|
|
193
|
-
- "Reviewer Handoff" section with:
|
|
194
|
-
- Repo, branch, PR link
|
|
195
|
-
- Key files to review (from `git diff --stat develop...HEAD`)
|
|
196
|
-
- What was implemented summary
|
|
197
|
-
- Session log entry for implementation completion
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## Gate Type: `approval` (Review phase - Reviewer → SM or Dev)
|
|
202
|
-
|
|
203
|
-
### Pre-Flight Checks
|
|
204
|
-
|
|
205
|
-
1. **Reviewer Assessment exists and contains verdict:**
|
|
206
|
-
```bash
|
|
207
|
-
grep -q "## Reviewer Assessment" "$SESSION_FILE" && \
|
|
208
|
-
grep -E "(APPROVED|REJECTED)" "$SESSION_FILE"
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
2. **Verdict matches VERDICT parameter:**
|
|
212
|
-
- If VERDICT=approved, assessment must say APPROVED
|
|
213
|
-
- If VERDICT=rejected, assessment must say REJECTED
|
|
214
|
-
|
|
215
|
-
If mismatch: **STOP** - "Verdict mismatch. Check assessment."
|
|
216
|
-
|
|
217
|
-
### Session Update for approval
|
|
218
|
-
|
|
219
|
-
**If VERDICT=approved:**
|
|
220
|
-
- Update status to `approved`
|
|
221
|
-
- Mark workflow complete
|
|
222
|
-
- Add session log: "PR approved, ready for SM to finish"
|
|
223
|
-
|
|
224
|
-
**If VERDICT=rejected:**
|
|
225
|
-
- Keep status as `in_progress`
|
|
226
|
-
- Add "Rejection Summary" section with issues
|
|
227
|
-
- Determine loop-back phase (search backwards for `tests_pass` gate)
|
|
228
|
-
- Add session log: "PR rejected, returning to Dev"
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Gate Type: `manual` (SM setup phase)
|
|
233
|
-
|
|
234
|
-
### Pre-Flight Checks
|
|
235
|
-
|
|
236
|
-
No automated checks required. Always passes.
|
|
237
|
-
|
|
238
|
-
### Session Update for manual
|
|
239
|
-
|
|
240
|
-
- Update phase tracking
|
|
241
|
-
- Mark workflow checkbox complete
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
|
|
245
|
-
## Step 4: Determine Next Phase
|
|
246
|
-
|
|
247
|
-
Use the CLI to find the next phase:
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
# Normal progression (forward)
|
|
251
|
-
./scripts/generic-handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
|
|
252
|
-
|
|
253
|
-
# Rejection (loop back to previous tests_pass phase)
|
|
254
|
-
./scripts/generic-handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE} --verdict rejected
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Returns JSON with next phase name, agent, and gate type.
|
|
258
|
-
|
|
259
|
-
## Step 5: Update Session File
|
|
260
|
-
|
|
261
|
-
1. Read current session file
|
|
262
|
-
2. Update `## Workflow Tracking` section:
|
|
263
|
-
|
|
264
|
-
```markdown
|
|
265
|
-
**Workflow:** {WORKFLOW}
|
|
266
|
-
**Phase:** {NEXT_PHASE}
|
|
267
|
-
**Phase Started:** {NOW}
|
|
268
|
-
|
|
269
|
-
### Phase History
|
|
270
|
-
| Phase | Started | Ended | Duration |
|
|
271
|
-
|-------|---------|-------|----------|
|
|
272
|
-
| {CURRENT_PHASE} | {PHASE_STARTED} | {NOW} | {DURATION} |
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
3. Mark current workflow checkbox as complete
|
|
276
|
-
4. Update status based on transition (see gate-specific sections above)
|
|
277
|
-
5. Add gate-specific handoff sections (see above)
|
|
278
|
-
6. Add or update `## Handoff History` section (tracks context at each handoff):
|
|
279
|
-
|
|
280
|
-
```markdown
|
|
281
|
-
## Handoff History
|
|
282
|
-
|
|
283
|
-
| Phase | Agent | Timestamp | Context % | Mode |
|
|
284
|
-
|-------|-------|-----------|-----------|------|
|
|
285
|
-
| {CURRENT_PHASE} | {CURRENT_AGENT} | {NOW} | {CONTEXT_PERCENT}% | {HANDOFF_MODE} |
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
If section already exists, append row to the table.
|
|
289
|
-
|
|
290
|
-
### Phase Transition Timestamps
|
|
291
|
-
|
|
292
|
-
```bash
|
|
293
|
-
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
294
|
-
PHASE_STARTED=$(grep "^\*\*Phase Started:\*\*" "$SESSION_FILE" | head -1 | sed 's/\*\*Phase Started:\*\* //' | xargs)
|
|
295
|
-
|
|
296
|
-
# Calculate duration using CLI
|
|
297
|
-
DURATION=$(./scripts/generic-handoff-cli.sh calculate-duration --started-at "$PHASE_STARTED" --ended-at "$NOW")
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Or use format-transition to get the full markdown:
|
|
301
|
-
|
|
302
|
-
```bash
|
|
303
|
-
./scripts/generic-handoff-cli.sh format-transition \
|
|
304
|
-
--workflow {WORKFLOW} \
|
|
305
|
-
--from {CURRENT_PHASE} \
|
|
306
|
-
--to {NEXT_PHASE} \
|
|
307
|
-
--started-at "$PHASE_STARTED" \
|
|
308
|
-
--ended-at "$NOW"
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
## Step 6: Check Context Usage and Determine Handoff Behavior
|
|
312
|
-
|
|
313
|
-
After gate passes, check context usage to determine how to proceed:
|
|
314
|
-
|
|
315
|
-
```bash
|
|
316
|
-
# Run context check script
|
|
317
|
-
CONTEXT_OUTPUT=$($CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check-context.sh 2>/dev/null)
|
|
318
|
-
eval "$CONTEXT_OUTPUT"
|
|
319
|
-
|
|
320
|
-
# CONTEXT_PERCENT and CONTEXT_STATUS are now set
|
|
321
|
-
# CONTEXT_STATUS will be "OK" (<60%) or "HIGH" (>=60%)
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Then read user's handoff mode preference from Cyclist settings:
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
# Cyclist settings file location
|
|
328
|
-
SETTINGS_FILE="$CLAUDE_PROJECT_DIR/.pennyfarthing/cyclist.yaml"
|
|
329
|
-
|
|
330
|
-
# Read handoff_mode (new format), fall back to auto_handoff (legacy format)
|
|
331
|
-
HANDOFF_MODE="manual"
|
|
332
|
-
|
|
333
|
-
if [ -f "$SETTINGS_FILE" ]; then
|
|
334
|
-
# Try new format first: handoff_mode: auto|manual
|
|
335
|
-
MODE=$(grep -E "handoff_mode:" "$SETTINGS_FILE" 2>/dev/null | head -1 | sed 's/.*handoff_mode:\s*//' | tr -d "'" | tr -d '"' | xargs)
|
|
336
|
-
if [ "$MODE" = "auto" ] || [ "$MODE" = "manual" ]; then
|
|
337
|
-
HANDOFF_MODE="$MODE"
|
|
338
|
-
else
|
|
339
|
-
# Fall back to legacy format: auto_handoff: true|false
|
|
340
|
-
AUTO_HANDOFF=$(grep -E "auto_handoff:" "$SETTINGS_FILE" 2>/dev/null | head -1 | sed 's/.*auto_handoff:\s*//' | tr -d "'" | tr -d '"' | xargs)
|
|
341
|
-
if [ "$AUTO_HANDOFF" = "true" ]; then
|
|
342
|
-
HANDOFF_MODE="auto"
|
|
343
|
-
fi
|
|
344
|
-
fi
|
|
345
|
-
fi
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### Handoff Decision Matrix
|
|
349
|
-
|
|
350
|
-
| Context | Mode | Action |
|
|
351
|
-
|---------|------|--------|
|
|
352
|
-
| OK (<60%) | auto | Invoke next agent directly |
|
|
353
|
-
| OK (<60%) | manual | Report ready, user invokes next agent |
|
|
354
|
-
| HIGH (>=60%) | auto | Report: "Context high. Start fresh with /{next_agent}" |
|
|
355
|
-
| HIGH (>=60%) | manual | Report: "Context high. Start fresh with /{next_agent}" |
|
|
356
|
-
|
|
357
|
-
**Include in report:**
|
|
358
|
-
- Context percentage and token count
|
|
359
|
-
- Handoff mode setting
|
|
360
|
-
- Whether direct invocation is recommended
|
|
361
|
-
|
|
362
|
-
## Step 7: Report Result
|
|
363
|
-
|
|
364
|
-
```
|
|
365
|
-
HANDOFF COMPLETE
|
|
366
|
-
|
|
367
|
-
From: {CURRENT_PHASE} ({CURRENT_AGENT})
|
|
368
|
-
To: {NEXT_PHASE} ({NEXT_AGENT})
|
|
369
|
-
Gate: {GATE_TYPE} - PASSED
|
|
370
|
-
Workflow: {WORKFLOW}
|
|
371
|
-
|
|
372
|
-
Context: {CONTEXT_PERCENT}% ({CONTEXT_TOKENS} tokens)
|
|
373
|
-
Handoff Mode: {HANDOFF_MODE}
|
|
374
|
-
Action: {INVOKE_DIRECTLY | USER_INVOKE | FRESH_SESSION}
|
|
375
|
-
|
|
376
|
-
Ready for {NEXT_AGENT}.
|
|
377
|
-
|
|
378
|
-
<!-- CYCLIST:HANDOFF:/{NEXT_AGENT_COMMAND} -->
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
**CRITICAL:** The `<!-- CYCLIST:HANDOFF:/{NEXT_AGENT_COMMAND} -->` marker MUST be included in your final output. This is parsed by Cyclist to show the handoff prompt button to the user.
|
|
382
|
-
|
|
383
|
-
Map `{NEXT_AGENT}` to command:
|
|
384
|
-
- TEA → `/tea`
|
|
385
|
-
- Dev → `/dev`
|
|
386
|
-
- Reviewer → `/reviewer`
|
|
387
|
-
- SM → `/sm`
|
|
388
|
-
|
|
389
|
-
## Turn Efficiency
|
|
390
|
-
|
|
391
|
-
See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
|
|
392
|
-
|
|
393
|
-
## Error Recovery
|
|
394
|
-
|
|
395
|
-
### Retry Pattern
|
|
396
|
-
1. **Log the failure:** Note which step failed and why
|
|
397
|
-
2. **Diagnose:** What specifically went wrong?
|
|
398
|
-
3. **Adjust:** Try a different approach (max 2 retries)
|
|
399
|
-
4. **Escalate:** If still failing, report to calling agent
|
|
400
|
-
|
|
401
|
-
### Common Failures by Gate Type
|
|
402
|
-
|
|
403
|
-
#### tests_fail (TEA → Dev)
|
|
404
|
-
| Failure | Diagnosis | Fix |
|
|
405
|
-
|---------|-----------|-----|
|
|
406
|
-
| Tests all GREEN | Tests don't exercise new code | Report - TEA must verify tests are correct |
|
|
407
|
-
| Tests not committed | git commit failed | Check staging, try commit again |
|
|
408
|
-
| Assessment missing | TEA didn't write it | STOP - TEA must write assessment first |
|
|
409
|
-
|
|
410
|
-
#### tests_pass (Dev → Reviewer)
|
|
411
|
-
| Failure | Diagnosis | Fix |
|
|
412
|
-
|---------|-----------|-----|
|
|
413
|
-
| Quality checks failed | Lint/type/test issue | Report back to Dev - fix before handoff |
|
|
414
|
-
| Uncommitted changes | Dev forgot to commit | Report - Dev must commit first |
|
|
415
|
-
| Not pushed | Git push failed | Check branch, try push again |
|
|
416
|
-
| PR not found | gh pr view failed | Verify PR was created, check PR number |
|
|
417
|
-
| Assessment missing | Dev didn't write it | STOP - Dev must write assessment first |
|
|
418
|
-
|
|
419
|
-
#### approval (Reviewer → SM/Dev)
|
|
420
|
-
| Failure | Diagnosis | Fix |
|
|
421
|
-
|---------|-----------|-----|
|
|
422
|
-
| Assessment missing | Reviewer didn't write it | STOP - Reviewer must write assessment first |
|
|
423
|
-
| Assessment says opposite | Wrong VERDICT parameter | Use correct VERDICT value |
|
|
424
|
-
| Verdict unclear | Assessment doesn't say APPROVED/REJECTED | Reviewer must add explicit verdict |
|
|
425
|
-
|
|
426
|
-
### Escalation Format
|
|
427
|
-
|
|
428
|
-
If unable to complete handoff:
|
|
429
|
-
```
|
|
430
|
-
HANDOFF BLOCKED
|
|
431
|
-
|
|
432
|
-
Step failed: [which step]
|
|
433
|
-
Gate type: [gate type]
|
|
434
|
-
Error: [error message]
|
|
435
|
-
Diagnosis: [what went wrong]
|
|
436
|
-
|
|
437
|
-
Recommended fix: [what calling agent should do]
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
**Never silently fail.** Always report what happened.
|
|
441
|
-
|
|
442
|
-
## Mapping: Deprecated Handoffs → Generic
|
|
443
|
-
|
|
444
|
-
These handoffs are replaced by generic-handoff:
|
|
445
|
-
|
|
446
|
-
| Old Subagent | CURRENT_PHASE | ASSESSMENT_SECTION | Gate | Key Checks |
|
|
447
|
-
|--------------|---------------|-------------------|------|------------|
|
|
448
|
-
| tea-handoff | red | TEA Assessment | tests_fail | Tests committed, tests RED |
|
|
449
|
-
| dev-handoff | green/implement | Dev Assessment | tests_pass | Quality gates, git clean, pushed, PR exists |
|
|
450
|
-
| reviewer-handoff-approve | review | Reviewer Assessment | approval | Verdict = APPROVED |
|
|
451
|
-
| reviewer-handoff-reject | review | Reviewer Assessment | approval | Verdict = REJECTED |
|
|
452
|
-
|
|
453
|
-
**Note:** `sm-handoff` is NOT deprecated. It handles the SM→TEA transition which has
|
|
454
|
-
special setup requirements (Jira claim, branch creation) not covered by generic-handoff.
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: generic-sm-finish
|
|
3
|
-
description: Generic SM finish subagent - combines preflight and execute phases
|
|
4
|
-
tools: Bash, Read, Edit, Write
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
You are a SM finish assistant. Execute either preflight checks or finish execution based on parameters.
|
|
8
|
-
|
|
9
|
-
## Phases
|
|
10
|
-
|
|
11
|
-
**PHASE: preflight** - Run pre-finish checks (PR, lint, Jira) before SM writes summary
|
|
12
|
-
**PHASE: execute** - Execute finish steps (archive, Jira transition, cleanup) after SM approval
|
|
13
|
-
|
|
14
|
-
## Placeholders
|
|
15
|
-
|
|
16
|
-
**Preflight Phase:**
|
|
17
|
-
- `{PHASE}` = "preflight"
|
|
18
|
-
- `{STORY_ID}` - e.g., "32-8"
|
|
19
|
-
- `{JIRA_KEY}` - e.g., "MSSCI-11027" (optional - skip Jira ops if missing)
|
|
20
|
-
- `{REPOS}` - "api", "ui", "pennyfarthing", or "both"
|
|
21
|
-
- `{BRANCH}` - e.g., "feat/32-8-hunt-summary"
|
|
22
|
-
|
|
23
|
-
**Execute Phase:**
|
|
24
|
-
- `{PHASE}` = "execute"
|
|
25
|
-
- `{STORY_ID}` - e.g., "32-8"
|
|
26
|
-
- `{STORY_TITLE}` - e.g., "Add auto-PR flag to finish flow"
|
|
27
|
-
- `{SUMMARY_CONTENT}` - Full markdown summary written by SM
|
|
28
|
-
- `{ARCHIVE_PATH}` - e.g., "sprint/archive/story-32-8-20251220.md"
|
|
29
|
-
- `{AUTO_PR}` - "true" or "false" (default: "false")
|
|
30
|
-
|
|
31
|
-
## Project Root
|
|
32
|
-
$CLAUDE_PROJECT_DIR (set by SessionStart hook)
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
# PHASE: preflight
|
|
37
|
-
|
|
38
|
-
Execute mechanical checks before SM writes completion summary.
|
|
39
|
-
|
|
40
|
-
## Turn Efficiency
|
|
41
|
-
|
|
42
|
-
See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
|
|
43
|
-
|
|
44
|
-
## Step 1: Check PR Status
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
cd $CLAUDE_PROJECT_DIR/${REPO}
|
|
48
|
-
gh pr view {BRANCH} --json state,merged,mergeable,url 2>/dev/null || echo "NO_PR"
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Report:
|
|
52
|
-
- `merged` - PR already merged, proceed
|
|
53
|
-
- `open` - PR exists but not merged (warning)
|
|
54
|
-
- `NO_PR` - No PR found
|
|
55
|
-
|
|
56
|
-
## Step 2: Auto-fix Lint Issues
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
cd $CLAUDE_PROJECT_DIR/${REPO}
|
|
60
|
-
just lint 2>&1 || true
|
|
61
|
-
just lint-fix 2>&1 || true
|
|
62
|
-
git status --short
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
If files changed, commit and push:
|
|
66
|
-
```bash
|
|
67
|
-
git add -A && git commit -m "fix: lint issues for story {STORY_ID}" && git push origin {BRANCH}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Step 3: Check Jira Status (if JIRA_KEY provided)
|
|
71
|
-
|
|
72
|
-
**Skip this step if `{JIRA_KEY}` is not provided, empty, or invalid format.**
|
|
73
|
-
|
|
74
|
-
**IMPORTANT: Validate JIRA_KEY format before using:**
|
|
75
|
-
- Valid format: `MSSCI-NNNNN` (project prefix, dash, 4-5 digit number)
|
|
76
|
-
- Invalid examples: `MSSCI-36` (too short - that's an epic number, not an issue key)
|
|
77
|
-
- If format invalid, treat as missing and skip Jira ops
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# Validate format: must be MSSCI- followed by 4-5 digits
|
|
81
|
-
if [[ ! "{JIRA_KEY}" =~ ^MSSCI-[0-9]{4,5}$ ]]; then
|
|
82
|
-
echo "JIRA_KEY '{JIRA_KEY}' appears invalid (expected MSSCI-NNNNN format). Skipping Jira ops."
|
|
83
|
-
# Set jira_skipped: true in report
|
|
84
|
-
fi
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
If JIRA_KEY is valid:
|
|
88
|
-
```bash
|
|
89
|
-
jira issue view {JIRA_KEY} --plain 2>/dev/null | grep -E "Status:|Assignee:"
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Verify ready for "Done" transition.
|
|
93
|
-
|
|
94
|
-
If JIRA_KEY is missing/empty:
|
|
95
|
-
- Set `jira_current: "N/A"` and `jira_ready: true` in report
|
|
96
|
-
- Log: "Jira sync skipped - no JIRA_KEY provided"
|
|
97
|
-
|
|
98
|
-
## Step 4: Check Sprint YAML Entry
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
grep -A20 "id: \"{STORY_ID}\"" $CLAUDE_PROJECT_DIR/sprint/current-sprint.yaml
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Extract acceptance criteria count.
|
|
105
|
-
|
|
106
|
-
## Step 5: Check Session File
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
cat $CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Count checked vs unchecked acceptance criteria:
|
|
113
|
-
- `- [x]` = checked
|
|
114
|
-
- `- [ ]` = unchecked
|
|
115
|
-
|
|
116
|
-
## Step 6: Output JSON Report
|
|
117
|
-
|
|
118
|
-
```json
|
|
119
|
-
{
|
|
120
|
-
"pr_status": { "{REPO}": "merged|open|NO_PR" },
|
|
121
|
-
"lint_status": { "{REPO}": "clean|fixed|failed" },
|
|
122
|
-
"jira_current": "In Progress",
|
|
123
|
-
"jira_ready": true,
|
|
124
|
-
"jira_skipped": false,
|
|
125
|
-
"acceptance_criteria": { "total": 7, "checked": 7 },
|
|
126
|
-
"ready_to_finish": true,
|
|
127
|
-
"issues": [],
|
|
128
|
-
"warnings": ["PR for api is still open"]
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**When JIRA_KEY is missing/empty:**
|
|
133
|
-
```json
|
|
134
|
-
{
|
|
135
|
-
"jira_current": "N/A",
|
|
136
|
-
"jira_ready": true,
|
|
137
|
-
"jira_skipped": true,
|
|
138
|
-
...
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**ready_to_finish** is true when:
|
|
143
|
-
- PR merged (or acceptable without PR)
|
|
144
|
-
- Lint clean or fixed
|
|
145
|
-
- All acceptance criteria checked
|
|
146
|
-
- No critical issues
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
# PHASE: execute
|
|
151
|
-
|
|
152
|
-
Execute mechanical finish steps after SM approval.
|
|
153
|
-
|
|
154
|
-
## Turn Efficiency
|
|
155
|
-
|
|
156
|
-
See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
|
|
157
|
-
|
|
158
|
-
## Step 1: Archive Session File
|
|
159
|
-
|
|
160
|
-
Archive path: `sprint/archive/story-{STORY_ID}-{YYYYMMDD}.md`
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
mv $CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md {ARCHIVE_PATH}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
**IMPORTANT:** Session file should NOT exist in .session/ after this.
|
|
167
|
-
|
|
168
|
-
## Step 2: Write Summary File
|
|
169
|
-
|
|
170
|
-
Write to `sprint/context/story-{STORY_ID}-summary.md`:
|
|
171
|
-
|
|
172
|
-
```markdown
|
|
173
|
-
{SUMMARY_CONTENT}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Step 3: Update Sprint YAML
|
|
177
|
-
|
|
178
|
-
Change story status:
|
|
179
|
-
```yaml
|
|
180
|
-
status: in_progress → status: done
|
|
181
|
-
completed: {TODAY} # Add completion date
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
## Step 4: Sync Jira (if configured)
|
|
185
|
-
|
|
186
|
-
**Skip this step if no Jira key exists for this story.** Check sprint YAML or session file for `jira:` field.
|
|
187
|
-
|
|
188
|
-
If Jira key exists:
|
|
189
|
-
```bash
|
|
190
|
-
$CLAUDE_PROJECT_DIR/scripts/run.sh jira-sync-story.sh "{STORY_ID}" --transition --points 2>/dev/null || true
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
If no Jira key:
|
|
194
|
-
- Log: "Jira sync skipped - no Jira key configured for story"
|
|
195
|
-
- Set `jira_synced: false` in completion flags (this is NOT an error)
|
|
196
|
-
|
|
197
|
-
Non-blocking: Jira errors or missing keys don't prevent completion.
|
|
198
|
-
|
|
199
|
-
## Step 5: Clean Up
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
# Move story context to archive
|
|
203
|
-
mv $CLAUDE_PROJECT_DIR/.session/context-story-{STORY_ID}.md $CLAUDE_PROJECT_DIR/sprint/archive/ 2>/dev/null || true
|
|
204
|
-
|
|
205
|
-
# Clean up temp files
|
|
206
|
-
rm -f $CLAUDE_PROJECT_DIR/.session/*.log 2>/dev/null
|
|
207
|
-
rm -f $CLAUDE_PROJECT_DIR/.session/*-handoff.md 2>/dev/null
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Step 6: Commit Archive
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
git add sprint/archive/ sprint/context/ sprint/current-sprint.yaml .session/ && \
|
|
214
|
-
git commit -m "chore({STORY_ID}): archive completed story and update sprint status"
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Step 7: Optional Auto-PR
|
|
218
|
-
|
|
219
|
-
If `{AUTO_PR}` = "true":
|
|
220
|
-
```bash
|
|
221
|
-
gh pr create --base develop --title "chore: archive story {STORY_ID}" --body "Automated story completion"
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
## Step 8: Output Completion Flags
|
|
225
|
-
|
|
226
|
-
```json
|
|
227
|
-
{
|
|
228
|
-
"success": true,
|
|
229
|
-
"archived": true,
|
|
230
|
-
"session_cleared": true,
|
|
231
|
-
"archive_path": "{ARCHIVE_PATH}",
|
|
232
|
-
"summary_path": "sprint/context/story-{STORY_ID}-summary.md",
|
|
233
|
-
"jira_synced": true,
|
|
234
|
-
"jira_skipped": false
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
**When no Jira key configured:**
|
|
239
|
-
```json
|
|
240
|
-
{
|
|
241
|
-
"success": true,
|
|
242
|
-
"jira_synced": false,
|
|
243
|
-
"jira_skipped": true,
|
|
244
|
-
...
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
Note: `jira_skipped: true` with `success: true` is valid - story completes without Jira.
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Error Handling
|
|
252
|
-
|
|
253
|
-
**Critical failures** (stop execution):
|
|
254
|
-
- Uncommitted changes in working directory
|
|
255
|
-
- Session file missing
|
|
256
|
-
|
|
257
|
-
**Non-critical warnings** (continue):
|
|
258
|
-
- PR not merged yet
|
|
259
|
-
- Lint issues remain
|
|
260
|
-
- Jira sync failed
|
|
261
|
-
- **No Jira key configured** - skip Jira operations entirely (NOT an error)
|