@pennyfarthing/core 7.4.1 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/package.json +1 -1
  2. package/packages/core/dist/cli/commands/doctor-legacy.test.d.ts +13 -0
  3. package/packages/core/dist/cli/commands/doctor-legacy.test.d.ts.map +1 -0
  4. package/packages/core/dist/cli/commands/doctor-legacy.test.js +207 -0
  5. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -0
  6. package/packages/core/dist/cli/commands/doctor.d.ts +16 -0
  7. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  8. package/packages/core/dist/cli/commands/doctor.js +130 -2
  9. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  10. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  11. package/packages/core/dist/cli/commands/init.js +17 -27
  12. package/packages/core/dist/cli/commands/init.js.map +1 -1
  13. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  14. package/packages/core/dist/cli/commands/update.js +21 -52
  15. package/packages/core/dist/cli/commands/update.js.map +1 -1
  16. package/packages/core/dist/cli/utils/symlinks.d.ts +15 -0
  17. package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -1
  18. package/packages/core/dist/cli/utils/symlinks.js +148 -2
  19. package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
  20. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  21. package/packages/core/dist/cli/utils/themes.js +9 -0
  22. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  23. package/pennyfarthing-dist/agents/dev.md +29 -24
  24. package/pennyfarthing-dist/agents/handoff.md +42 -119
  25. package/pennyfarthing-dist/agents/reviewer.md +32 -37
  26. package/pennyfarthing-dist/agents/sm-handoff.md +43 -66
  27. package/pennyfarthing-dist/agents/sm.md +52 -35
  28. package/pennyfarthing-dist/agents/tea.md +25 -8
  29. package/pennyfarthing-dist/agents/testing-runner.md +4 -4
  30. package/pennyfarthing-dist/commands/architect.md +0 -55
  31. package/pennyfarthing-dist/commands/dev.md +1 -54
  32. package/pennyfarthing-dist/commands/devops.md +0 -52
  33. package/pennyfarthing-dist/commands/health-check.md +33 -0
  34. package/pennyfarthing-dist/commands/orchestrator.md +0 -49
  35. package/pennyfarthing-dist/commands/pm.md +0 -53
  36. package/pennyfarthing-dist/commands/reviewer.md +1 -58
  37. package/pennyfarthing-dist/commands/sm.md +1 -64
  38. package/pennyfarthing-dist/commands/sprint.md +133 -0
  39. package/pennyfarthing-dist/commands/standalone.md +194 -0
  40. package/pennyfarthing-dist/commands/tea.md +1 -57
  41. package/pennyfarthing-dist/commands/tech-writer.md +0 -46
  42. package/pennyfarthing-dist/commands/theme-maker.md +10 -5
  43. package/pennyfarthing-dist/commands/ux-designer.md +0 -55
  44. package/pennyfarthing-dist/guides/XML-TAGS.md +156 -0
  45. package/pennyfarthing-dist/guides/agent-behavior.md +64 -38
  46. package/pennyfarthing-dist/guides/measurement-framework.md +210 -0
  47. package/pennyfarthing-dist/personas/themes/a-team.yaml +130 -0
  48. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +1 -1
  49. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +1 -1
  50. package/pennyfarthing-dist/personas/themes/arcane.yaml +1 -1
  51. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +1 -1
  52. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +1 -1
  53. package/pennyfarthing-dist/personas/themes/black-sails.yaml +1 -1
  54. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +1 -1
  55. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +1 -1
  56. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +1 -1
  57. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +1 -1
  58. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +1 -1
  59. package/pennyfarthing-dist/personas/themes/deadwood.yaml +1 -1
  60. package/pennyfarthing-dist/personas/themes/dickens.yaml +1 -1
  61. package/pennyfarthing-dist/personas/themes/discworld.yaml +1 -1
  62. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +1 -1
  63. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +1 -1
  64. package/pennyfarthing-dist/personas/themes/dune.yaml +1 -1
  65. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +1 -1
  66. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +1 -1
  67. package/pennyfarthing-dist/personas/themes/futurama.yaml +1 -1
  68. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +1 -1
  69. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +131 -1
  70. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +1 -1
  71. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +1 -1
  72. package/pennyfarthing-dist/personas/themes/hannibal.yaml +1 -1
  73. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +1 -1
  74. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +1 -1
  75. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +1 -1
  76. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +1 -1
  77. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +130 -0
  78. package/pennyfarthing-dist/personas/themes/mad-max.yaml +1 -1
  79. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +1 -1
  80. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +1 -1
  81. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +130 -0
  82. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +130 -0
  83. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +1 -1
  84. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +1 -1
  85. package/pennyfarthing-dist/personas/themes/sandman.yaml +1 -1
  86. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +1 -1
  87. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +1 -1
  88. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +139 -3
  89. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +124 -0
  90. package/pennyfarthing-dist/personas/themes/star-wars.yaml +1 -1
  91. package/pennyfarthing-dist/personas/themes/succession.yaml +1 -1
  92. package/pennyfarthing-dist/personas/themes/superfriends.yaml +131 -1
  93. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +131 -1
  94. package/pennyfarthing-dist/personas/themes/the-americans.yaml +1 -1
  95. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +131 -1
  96. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +1 -1
  97. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +1 -1
  98. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +1 -1
  99. package/pennyfarthing-dist/personas/themes/west-wing.yaml +6 -6
  100. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +1 -1
  101. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +1 -1
  102. package/pennyfarthing-dist/scripts/core/check-context.sh +23 -6
  103. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +95 -0
  104. package/pennyfarthing-dist/scripts/git/release.sh +3 -2
  105. package/pennyfarthing-dist/scripts/health/drift-detection.sh +162 -0
  106. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +87 -0
  107. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +1 -1
  108. package/pennyfarthing-dist/scripts/misc/deploy.sh +1 -1
  109. package/pennyfarthing-dist/scripts/misc/statusline.sh +25 -32
  110. package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.mjs +377 -0
  111. package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.sh +9 -0
  112. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.js +492 -0
  113. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +8 -200
  114. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +38 -5
  115. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +40 -0
  116. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +12 -7
  117. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +11 -3
  118. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +122 -0
  119. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +3 -2
  120. package/packages/core/dist/workflow/generic-handoff.d.ts +0 -281
  121. package/packages/core/dist/workflow/generic-handoff.d.ts.map +0 -1
  122. package/packages/core/dist/workflow/generic-handoff.js +0 -411
  123. package/packages/core/dist/workflow/generic-handoff.js.map +0 -1
  124. package/packages/core/dist/workflow/generic-handoff.test.d.ts +0 -21
  125. package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +0 -1
  126. package/packages/core/dist/workflow/generic-handoff.test.js +0 -499
  127. package/packages/core/dist/workflow/generic-handoff.test.js.map +0 -1
@@ -2,69 +2,6 @@
2
2
  description: Scrum Master - Story coordination and sprint management
3
3
  ---
4
4
 
5
- <agent-activation>
6
- **FIRST:** Use Bash tool to run:
7
5
  ```bash
8
- d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/agent-session.sh start "sm"
6
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/phase-check-start.sh "sm"
9
7
  ```
10
- This finds the project root and loads your persona. Adopt the character shown in the output.
11
-
12
- Then load and follow `.pennyfarthing/agents/sm.md`
13
- </agent-activation>
14
-
15
- <agent-exit>
16
- On exit: Capture learnings to sidecar, run `run.sh core/agent-session.sh stop`
17
- </agent-exit>
18
-
19
- <purpose>
20
- Coordinator who manages story flow from backlog through completion, handling decisions and handoffs.
21
- </purpose>
22
-
23
- <when-to-use>
24
- - New story starting (backlog selection, context creation)
25
- - Story completion (summary writing, archival)
26
- - Workflow status checks during in-progress work
27
- - Blockers requiring story management decisions
28
- </when-to-use>
29
-
30
- <workflow-position>
31
- **TDD Flow:** **SM** → TEA → Dev → Reviewer → **SM** (finish)
32
-
33
- | Entry | Exit |
34
- |-------|------|
35
- | Story selected or completion ready | After TEA (NEW_WORK) or after Reviewer approval (FINISH) |
36
- </workflow-position>
37
-
38
- <workflow-steps>
39
- 1. Helper checks workflow status (finish vs. new work)
40
- 2. For new work: Helper researches backlog, I select story
41
- 3. Helper summarizes story files, I write technical context
42
- 4. Helper sets up session, branches, and Jira claim
43
- 5. Handoff to TEA (3+ pts) or Dev (1-2 pts trivial work)
44
- 6. On completion: Helper verifies PR, I write summary
45
- 7. Helper archives and transitions Jira to Done
46
- </workflow-steps>
47
-
48
- <scale-routing>
49
- | Points | Routing | Workflow |
50
- |--------|---------|----------|
51
- | 1-2 pts (trivial) | Dev | SM → Dev (skip TEA) |
52
- | 3-5 pts (standard) | TEA | SM → TEA → Dev |
53
- | 8+ pts (complex) | TEA | SM → TEA → Dev |
54
- </scale-routing>
55
-
56
- <responsibilities>
57
- | I Do (Opus) | Helper Does (Haiku) |
58
- |-------------|---------------------|
59
- | Select and confirm stories | Scan backlog, research options |
60
- | Write technical context docs | Summarize files, check Jira |
61
- | Write completion summaries | Archive sessions, update YAML |
62
- | Make workflow decisions | Execute mechanical steps |
63
- </responsibilities>
64
-
65
- <reference>
66
- - **Agent:** `.pennyfarthing/agents/sm.md`
67
- - **Sidecar:** `.claude/project/agents/sm-sidecar/`
68
- - **Skills:** `/sprint-context`, `/story-management`
69
- - **Subagents:** `workflow-status-check`, `generic-sm-setup`, `generic-sm-finish`, `sm-file-summary`, `sm-handoff`
70
- </reference>
@@ -0,0 +1,133 @@
1
+ ---
2
+ description: Sprint status, backlog, and story management - check status, find work, archive completed stories
3
+ args: "[status|backlog|work|archive|new|future|promote] [args...]"
4
+ ---
5
+
6
+ # Sprint Management
7
+
8
+ <purpose>
9
+ Manage sprint workflow: check status, view backlog, start work, archive completed stories, and promote future epics. This is the primary interface for sprint operations.
10
+ </purpose>
11
+
12
+ <critical>
13
+ Never manually edit `sprint/current-sprint.yaml`. Always use the provided scripts.
14
+ </critical>
15
+
16
+ ## Commands
17
+
18
+ ### `/sprint` or `/sprint status [filter]`
19
+
20
+ Show current sprint status with story counts and points.
21
+
22
+ ```bash
23
+ .pennyfarthing/scripts/core/run.sh sprint/sprint-status.sh [filter]
24
+ ```
25
+
26
+ | Filter | Description |
27
+ |--------|-------------|
28
+ | (none) | All stories |
29
+ | `todo` | Backlog only |
30
+ | `in-progress` | Work in progress |
31
+ | `done` | Completed stories |
32
+
33
+ ### `/sprint backlog`
34
+
35
+ Show available stories ready for work, grouped by epic.
36
+
37
+ ```bash
38
+ .pennyfarthing/scripts/core/run.sh sprint/available-stories.sh
39
+ ```
40
+
41
+ ### `/sprint work [story-id|epic-id|next]`
42
+
43
+ Start work on a story. Primary entry point for development.
44
+
45
+ | Argument | Behavior |
46
+ |----------|----------|
47
+ | (none) | Interactive selection from backlog |
48
+ | `MSSCI-XXXXX` | Start specific story |
49
+ | `epic-XX` | Start first available story in epic |
50
+ | `next` | Auto-select highest priority story |
51
+
52
+ ```bash
53
+ # Check if story is available
54
+ .pennyfarthing/scripts/core/run.sh sprint/check-story.sh <story-id>
55
+
56
+ # Then load SM to begin work
57
+ ```
58
+
59
+ <workflow>
60
+ When starting work, this command:
61
+ 1. Validates story availability
62
+ 2. Loads SM agent
63
+ 3. SM creates context and claims Jira
64
+ 4. Hands off to TEA (tdd) or Dev (trivial)
65
+ </workflow>
66
+
67
+ ### `/sprint archive <story-id> [pr-number] [--apply]`
68
+
69
+ Archive a completed story.
70
+
71
+ ```bash
72
+ .pennyfarthing/scripts/core/run.sh sprint/archive-story.sh <story-id> [pr-number] [--apply]
73
+ ```
74
+
75
+ | Option | Description |
76
+ |--------|-------------|
77
+ | `--apply` | Also remove from current-sprint.yaml |
78
+
79
+ ### `/sprint new <yyww> <jira-id> <start> <end> "<goal>"`
80
+
81
+ Initialize a new sprint.
82
+
83
+ ```bash
84
+ .pennyfarthing/scripts/core/run.sh sprint/new-sprint.sh 2605 277 2026-02-03 2026-02-16 "Sprint goal"
85
+ ```
86
+
87
+ ### `/sprint future [--epic EPIC_ID]`
88
+
89
+ Show future work available for promotion.
90
+
91
+ ```bash
92
+ .pennyfarthing/scripts/core/run.sh sprint/list-future.sh [--epic epic-XX]
93
+ ```
94
+
95
+ ### `/sprint promote <epic-id>`
96
+
97
+ Move an epic from future.yaml to current sprint.
98
+
99
+ ```bash
100
+ .pennyfarthing/scripts/core/run.sh sprint/promote-epic.sh epic-XX
101
+ ```
102
+
103
+ ## Quick Reference
104
+
105
+ | Command | Action |
106
+ |---------|--------|
107
+ | `/sprint` | Show sprint status |
108
+ | `/sprint status todo` | Show backlog |
109
+ | `/sprint backlog` | Available stories |
110
+ | `/sprint work` | Interactive start |
111
+ | `/sprint work next` | Start highest priority |
112
+ | `/sprint work MSSCI-XXX` | Start specific story |
113
+ | `/sprint archive MSSCI-XXX` | Archive completed |
114
+ | `/sprint future` | Show future work |
115
+ | `/sprint promote epic-XX` | Promote to sprint |
116
+
117
+ ## Aliases
118
+
119
+ - `/new-work` is an alias for `/sprint work`
120
+
121
+ ## Related
122
+
123
+ | Skill | Purpose |
124
+ |-------|---------|
125
+ | `/jira` | Jira operations (create, sync, claim) |
126
+ | `/story` | Story creation, sizing, finish |
127
+ | `/sm` | Scrum Master agent for coordination |
128
+
129
+ <reference>
130
+ - **Skill:** `.claude/skills/sprint/skill.md`
131
+ - **Scripts:** `.pennyfarthing/scripts/sprint/`
132
+ - **Data:** `sprint/current-sprint.yaml`
133
+ </reference>
@@ -0,0 +1,194 @@
1
+ ---
2
+ description: Wrap current changes into a standalone Jira story, branch, PR, and merge
3
+ ---
4
+
5
+ # Standalone Story
6
+
7
+ Quickly wrap dirty changes into a tracked Jira story without the full sprint/workflow ceremony. Creates a Jira ticket, feature branch, commits, pushes, creates PR, and merges.
8
+
9
+ <purpose>
10
+ Fast path for shipping completed work that deserves tracking but doesn't need story setup upfront.
11
+ </purpose>
12
+
13
+ <when-to-use>
14
+ - You've done exploratory work that turned into something shippable
15
+ - A bug fix or feature emerged during other work
16
+ - Process improvements that should be tracked
17
+ - Any change worth a Jira ticket but not a full sprint story
18
+ </when-to-use>
19
+
20
+ <usage>
21
+ ```bash
22
+ # Interactive: prompts for title and description
23
+ /standalone
24
+
25
+ # With title
26
+ /standalone "Add drift detection script"
27
+
28
+ # With title and points
29
+ /standalone "Add drift detection script" 2
30
+ ```
31
+ </usage>
32
+
33
+ <workflow>
34
+ 1. Verify dirty files exist (abort if clean)
35
+ 2. Show changes and confirm with user
36
+ 3. Create Jira story (prompts for title/description if not provided)
37
+ 4. Add story to current sprint and mark Done
38
+ 5. Create feature branch: `feat/MSSCI-XXXXX-{slug}`
39
+ 6. Stage and commit changes
40
+ 7. Push branch
41
+ 8. Create PR with summary
42
+ 9. Merge PR (squash) and delete branch
43
+ 10. Return to develop
44
+ </workflow>
45
+
46
+ ## Execution
47
+
48
+ ### Step 1: Pre-Flight
49
+
50
+ ```bash
51
+ # Abort if clean
52
+ git diff --quiet && git diff --cached --quiet && {
53
+ echo "ERROR: No changes to commit."
54
+ exit 1
55
+ }
56
+
57
+ echo "=== Changes to Commit ==="
58
+ git status --short
59
+ git diff --stat
60
+ ```
61
+
62
+ ### Step 2: Gather Story Info
63
+
64
+ If title not provided, prompt:
65
+ - **Title:** Short summary (becomes Jira summary and commit message)
66
+ - **Description:** What was done (becomes Jira description and PR body)
67
+ - **Points:** Story points (default: 2)
68
+
69
+ ```bash
70
+ # Defaults
71
+ TITLE="${1:-}"
72
+ POINTS="${2:-2}"
73
+
74
+ if [ -z "$TITLE" ]; then
75
+ # Prompt user for title
76
+ echo "Enter story title:"
77
+ read TITLE
78
+ fi
79
+
80
+ # Generate description from changed files
81
+ CHANGED_FILES=$(git status --porcelain | awk '{print $2}')
82
+ DESCRIPTION="## Changes
83
+ $(git diff --stat)
84
+
85
+ ## Files
86
+ $(echo "$CHANGED_FILES" | head -20)"
87
+ ```
88
+
89
+ ### Step 3: Create Jira Story
90
+
91
+ ```bash
92
+ # Create Jira story
93
+ JIRA_OUTPUT=$(jira issue create \
94
+ --project MSSCI \
95
+ --type Story \
96
+ --summary "$TITLE" \
97
+ --body "$DESCRIPTION" \
98
+ --label pennyfarthing \
99
+ --custom story-points="$POINTS" \
100
+ --no-input 2>&1)
101
+
102
+ JIRA_KEY=$(echo "$JIRA_OUTPUT" | grep -oE 'MSSCI-[0-9]+' | head -1)
103
+
104
+ if [ -z "$JIRA_KEY" ]; then
105
+ echo "ERROR: Failed to create Jira story"
106
+ echo "$JIRA_OUTPUT"
107
+ exit 1
108
+ fi
109
+
110
+ echo "Created: $JIRA_KEY"
111
+
112
+ # Add to sprint and mark done
113
+ jira sprint add 276 "$JIRA_KEY"
114
+ jira issue move "$JIRA_KEY" "Done"
115
+ ```
116
+
117
+ ### Step 4: Create Branch and Commit
118
+
119
+ ```bash
120
+ # Generate slug from title
121
+ SLUG=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd 'a-z0-9-' | cut -c1-30)
122
+
123
+ # Stash, update develop, create branch
124
+ git stash push -m "standalone-wip-$(date +%s)"
125
+ git checkout develop && git pull origin develop
126
+ BRANCH="feat/${JIRA_KEY}-${SLUG}"
127
+ git checkout -b "$BRANCH"
128
+ git stash pop
129
+
130
+ # Stage and commit
131
+ git add .
132
+ git commit -m "feat: ${TITLE} (${JIRA_KEY})
133
+
134
+ ${DESCRIPTION}
135
+
136
+ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
137
+ ```
138
+
139
+ ### Step 5: Push and Create PR
140
+
141
+ ```bash
142
+ git push -u origin "$BRANCH"
143
+
144
+ gh pr create \
145
+ --title "feat: ${TITLE} (${JIRA_KEY})" \
146
+ --body "## Summary
147
+ ${DESCRIPTION}
148
+
149
+ ## Jira
150
+ [${JIRA_KEY}](https://1898andco.atlassian.net/browse/${JIRA_KEY})
151
+
152
+ ## Test plan
153
+ - [x] Changes verified locally
154
+
155
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)"
156
+ ```
157
+
158
+ ### Step 6: Merge and Cleanup
159
+
160
+ ```bash
161
+ # Get PR number and merge
162
+ PR_URL=$(gh pr view --json url -q '.url')
163
+ gh pr merge --squash --delete-branch
164
+
165
+ # Return to develop
166
+ git checkout develop
167
+ git pull origin develop
168
+
169
+ echo "✅ Done: $JIRA_KEY merged"
170
+ echo " Jira: https://1898andco.atlassian.net/browse/$JIRA_KEY"
171
+ echo " PR: $PR_URL"
172
+ ```
173
+
174
+ ## Safety
175
+
176
+ - **NEVER commit directly to develop**
177
+ - **Never force push**
178
+ - **Never commit secrets** (.env, credentials)
179
+ - **Abort if working directory is clean**
180
+ - **Confirm changes before proceeding**
181
+
182
+ ## Comparison
183
+
184
+ | Command | Tracking | Branch | PR | Use For |
185
+ |---------|----------|--------|-----|---------|
186
+ | `/chore` | None | chore/* | No | Quick maintenance |
187
+ | `/standalone` | Jira | feat/* | Yes | Trackable features |
188
+ | `/sprint work` | Jira + Sprint | feat/* | Yes | Planned sprint work |
189
+
190
+ <related>
191
+ - `/chore` - Quick commits without Jira tracking
192
+ - `/sprint work` - Full sprint workflow with story setup
193
+ - `/git-cleanup` - Organize multiple changes into groups
194
+ </related>
@@ -2,62 +2,6 @@
2
2
  description: Test Engineer/Architect - Test strategy and TDD
3
3
  ---
4
4
 
5
- <agent-activation>
6
- **FIRST:** Use Bash tool to run:
7
5
  ```bash
8
- d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/agent-session.sh start "tea"
6
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/phase-check-start.sh "tea"
9
7
  ```
10
- This finds the project root and loads your persona. Adopt the character shown in the output.
11
-
12
- Then load and follow `.pennyfarthing/agents/tea.md`
13
- </agent-activation>
14
-
15
- <agent-exit>
16
- On exit: Capture learnings to sidecar, run `run.sh core/agent-session.sh stop`
17
- </agent-exit>
18
-
19
- <purpose>
20
- Quality guardian who designs tests before implementation using TDD.
21
- </purpose>
22
-
23
- <when-to-use>
24
- - After SM sets up story context with acceptance criteria
25
- - When implementing new features (full TDD flow)
26
- - When adding significant behavioral changes
27
- - Before Dev phase (RED → GREEN → Refactor)
28
- </when-to-use>
29
-
30
- <workflow-position>
31
- **TDD Flow:** SM → **TEA** → Dev → Reviewer
32
-
33
- | Entry | Exit |
34
- |-------|------|
35
- | After SM context setup | To Dev with failing tests (RED) or bypass documented |
36
- </workflow-position>
37
-
38
- <workflow-steps>
39
- 1. Read story and acceptance criteria from session file
40
- 2. Determine if tests are needed (assess chore bypass criteria)
41
- 3. If tests needed: write failing tests covering each AC
42
- 4. Verify RED state (tests failing, ready for Dev)
43
- 5. Document assessment in session file
44
- 6. Have Helper verify tests and update handoff
45
- 7. Hand off to Dev: "Tests are RED. Make them GREEN."
46
- </workflow-steps>
47
-
48
- <responsibilities>
49
- | I Do (Opus) | Helper Does (Haiku) |
50
- |-------------|---------------------|
51
- | Read ACs, plan test strategy | Run tests, report RED/GREEN status |
52
- | Write test code for all ACs | Gather test execution results |
53
- | Judge if tests can be bypassed | Update session for Dev handoff |
54
- | Assess coverage vs complexity | Execute mechanical checks |
55
- </responsibilities>
56
-
57
- <reference>
58
- - **Agent:** `.pennyfarthing/agents/tea.md`
59
- - **Sidecar:** `.claude/project/agents/tea-sidecar/`
60
- - **Skills:** `/testing`
61
- - **Subagents:** `testing-runner.md`, `tea-handoff.md`
62
- - **Bypass:** Docs, config, dependencies
63
- </reference>
@@ -2,52 +2,6 @@
2
2
  description: Technical Writer - Documentation creation and maintenance
3
3
  ---
4
4
 
5
- <agent-activation>
6
- **FIRST:** Use Bash tool to run:
7
5
  ```bash
8
6
  d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/agent-session.sh start "tech-writer"
9
7
  ```
10
- This finds the project root and loads your persona. Adopt the character shown in the output.
11
-
12
- Then load and follow `.pennyfarthing/agents/tech-writer.md`
13
- </agent-activation>
14
-
15
- <agent-exit>
16
- On exit: Capture learnings to sidecar, run `run.sh core/agent-session.sh stop`
17
- </agent-exit>
18
-
19
- <purpose>
20
- Documentation specialist who creates and maintains clear, accurate technical documentation outside the TDD flow.
21
- </purpose>
22
-
23
- <when-to-use>
24
- - After Dev completes feature implementation
25
- - API documentation tasks and updates
26
- - User guide and README creation
27
- - Architecture documentation needs
28
- - Developer onboarding documentation
29
- </when-to-use>
30
-
31
- <constraints>
32
- **Tech Writer does NOT write code.** Strictly limited to:
33
- - Reading and analyzing existing code to understand it
34
- - Creating and updating documentation (markdown, README, guides, API docs)
35
- - Writing code examples and snippets for documentation purposes only
36
- - Suggesting improvements to code comments
37
- - **Handoff to Dev:** If docs reveal missing code comments, inconsistent naming, or missing features, document the need and let Dev handle code changes.
38
- </constraints>
39
-
40
- <key-workflows>
41
- 1. **API Documentation** - Comprehensive endpoint documentation with requests, responses, and error codes
42
- 2. **User Guides** - Step-by-step guides with examples and troubleshooting
43
- 3. **README Files** - Overview, installation, usage, configuration, examples, contributing
44
- 4. **Architecture Documentation** - System design and patterns reference
45
- 5. **Developer Onboarding** - Getting started guides and project structure docs
46
- </key-workflows>
47
-
48
- <reference>
49
- - **Agent:** `.pennyfarthing/agents/tech-writer.md`
50
- - **Sidecar:** `.claude/project/agents/tech-writer-sidecar/`
51
- - **Skills:** `/architecture`, `/documentation-patterns`
52
- - **Docs Locations:** `API/docs/`, `UI/docs/`
53
- </reference>
@@ -190,7 +190,7 @@ Examples:
190
190
 
191
191
  #### Visual Descriptions
192
192
 
193
- The `visual` field provides a portrait prompt for image generation. These descriptions are used by `scripts/generate-portraits.py` to create woodcut-style portraits.
193
+ The `visual` field provides a portrait prompt for image generation. These descriptions are used by `./scripts/generate-portraits.sh` to create woodcut-style portraits.
194
194
 
195
195
  **Guidelines:**
196
196
  - Focus on physical appearance, distinctive features, and visual props
@@ -344,20 +344,25 @@ questions:
344
344
  **If Yes:** Run the portrait generator:
345
345
 
346
346
  ```bash
347
- python3 scripts/generate-portraits.py --theme {theme-name}
347
+ ./scripts/generate-portraits.sh --theme {theme-name}
348
+ ```
349
+
350
+ **Generate a single agent's portrait:**
351
+ ```bash
352
+ ./scripts/generate-portraits.sh --theme {theme-name} --role {role}
348
353
  ```
349
354
 
350
355
  **Requirements:**
351
- - Python 3 with: `pip install diffusers transformers accelerate torch pillow pyyaml tqdm`
356
+ - Python 3 venv at `.venv/` with: `pip install diffusers transformers accelerate torch pillow pyyaml tqdm`
352
357
  - Apple Silicon Mac (MPS) or NVIDIA GPU (CUDA)
353
358
  - First run downloads ~6.5GB SDXL model
354
359
 
355
360
  **Dry run first:** To preview what will be generated:
356
361
  ```bash
357
- python3 scripts/generate-portraits.py --theme {theme-name} --dry-run
362
+ ./scripts/generate-portraits.sh --theme {theme-name} --dry-run
358
363
  ```
359
364
 
360
- **Output:** `pennyfarthing-dist/personas/portraits/{theme}/{role}.png` (100x100px woodcut style)
365
+ **Output:** `pennyfarthing-dist/personas/portraits/{theme}/{shortName}-{OCEAN}.png`
361
366
 
362
367
  **If generation fails:** The theme file is still valid - portraits can be generated later manually.
363
368
 
@@ -2,61 +2,6 @@
2
2
  description: UX Designer - User experience design and UI patterns
3
3
  ---
4
4
 
5
- <agent-activation>
6
- **FIRST:** Use Bash tool to run:
7
5
  ```bash
8
6
  d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/agent-session.sh start "ux-designer"
9
7
  ```
10
- This finds the project root and loads your persona. Adopt the character shown in the output.
11
-
12
- Then load and follow `.pennyfarthing/agents/ux-designer.md`
13
- </agent-activation>
14
-
15
- <agent-exit>
16
- On exit: Capture learnings to sidecar, run `run.sh core/agent-session.sh stop`
17
- </agent-exit>
18
-
19
- <purpose>
20
- Design user experiences and UI patterns that developers implement.
21
- </purpose>
22
-
23
- <when-to-use>
24
- - Feature needs UI/UX design before Dev implementation
25
- - Component design and specifications required
26
- - User flow and interaction design
27
- - Design system updates and accessibility reviews
28
- - Standalone design tasks outside TDD flow
29
- </when-to-use>
30
-
31
- <constraints>
32
- The UX Designer does NOT write code. Design only, hands off implementation to Dev.
33
-
34
- - Read and analyze existing UI code for patterns
35
- - Create design specifications and documentation
36
- - Design wireframes, user flows, and component specs
37
- - Review for consistency and accessibility
38
- - Make improvement recommendations
39
-
40
- All code changes handled by Dev with design specifications.
41
- </constraints>
42
-
43
- <key-workflows>
44
- 1. **Feature Design** - Requirements to UI specifications and wireframes
45
- 2. **Component Design** - New component design with props, variants, and accessibility
46
- 3. **User Flow Design** - Map interactions and decision paths
47
- </key-workflows>
48
-
49
- <design-principles>
50
- - **User-Centered:** Design for clarity and efficiency
51
- - **Consistent:** Follow design system and established patterns
52
- - **Accessible:** WCAG 2.1 AA, keyboard navigation, screen readers
53
- - **Responsive:** Mobile-first, flexible across devices
54
- </design-principles>
55
-
56
- <reference>
57
- - **Agent:** `.pennyfarthing/agents/ux-designer.md`
58
- - **Sidecar:** `.claude/project/agents/ux-designer-sidecar/`
59
- - **Design System:** TailwindCSS, shadcn/ui
60
- - **Skills:** `/dev-patterns`
61
- - **Guides:** `.pennyfarthing/guides/agent-behavior.md`
62
- </reference>