@pennyfarthing/core 11.3.2 → 11.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/pennyfarthing-dist/commands/pf-setup.md +4 -2
- package/pennyfarthing-dist/personas/themes/discworld.yaml +16 -24
- package/pennyfarthing-dist/workflows/project-setup/steps/step-08-theme-packs.md +1 -1
- package/pennyfarthing-dist/workflows/project-setup/steps/step-09-jira.md +92 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/{step-09-cyclist.md → step-10-cyclist.md} +2 -2
- package/pennyfarthing-dist/workflows/project-setup/steps/{step-10-complete.md → step-11-complete.md} +2 -1
- package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/client.py +14 -2
- package/pennyfarthing_scripts/settings/settings.py +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pennyfarthing
|
|
2
2
|
|
|
3
|
-
**v11.3.
|
|
3
|
+
**v11.3.3** | *The outer loop goes once, the inner loop goes many times.*
|
|
4
4
|
|
|
5
5
|
<img src="pennyfarthing.png" alt="Pennyfarthing Logo" width="75" style="float:left; margin:10px">
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -31,8 +31,10 @@ The setup workflow guides you through:
|
|
|
31
31
|
5. **shared-context.md** - Populate with real project info
|
|
32
32
|
6. **Task Runner** - Create justfile/Makefile
|
|
33
33
|
7. **Theme** - Select persona theme
|
|
34
|
-
8. **
|
|
35
|
-
9. **
|
|
34
|
+
8. **Theme Packs** - Optionally install additional theme packs
|
|
35
|
+
9. **Jira** - Configure Jira project key
|
|
36
|
+
10. **Cyclist** - Optionally install visual terminal
|
|
37
|
+
11. **Validation** - Run doctor and confirm setup
|
|
36
38
|
</workflow>
|
|
37
39
|
|
|
38
40
|
<when-to-use>
|
|
@@ -25,9 +25,8 @@ zeitgeist:
|
|
|
25
25
|
rating: exceptional
|
|
26
26
|
|
|
27
27
|
agents:
|
|
28
|
-
# JOB FAIR 2026-01-29: Carrot scored 86.88 as SM - earnest coordination
|
|
29
28
|
orchestrator:
|
|
30
|
-
character:
|
|
29
|
+
character: DEATH
|
|
31
30
|
visual: "A seven-foot skeleton in flowing black robes, holding an hourglass in one hand and a scythe in the other"
|
|
32
31
|
ocean:
|
|
33
32
|
O: 5
|
|
@@ -54,10 +53,9 @@ agents:
|
|
|
54
53
|
helper:
|
|
55
54
|
name: The Death of Rats
|
|
56
55
|
style: '"SQUEAK." Handles smaller matters, scurries through filesystems. The Grim Squeaker.'
|
|
57
|
-
shortName:
|
|
58
|
-
# JOB FAIR 2026-01-29: Vetinari scored 90.0 as SM (top)
|
|
56
|
+
shortName: DEATH
|
|
59
57
|
sm:
|
|
60
|
-
character:
|
|
58
|
+
character: Captain Carrot Ironfoundersson
|
|
61
59
|
visual: "A six-foot-tall man with honest blue eyes and red-gold hair, wearing the ua copper breastplate polished to perfection with two hippos on it in relief"
|
|
62
60
|
ocean:
|
|
63
61
|
O: 2
|
|
@@ -84,10 +82,9 @@ agents:
|
|
|
84
82
|
helper:
|
|
85
83
|
name: Nobby Nobbs
|
|
86
84
|
style: "'ere, I'll check the Jira for you. Technically human (has a certificate to prove it). Does the legwork no one else will."
|
|
87
|
-
shortName:
|
|
88
|
-
# JOB FAIR 2026-01-29: Adora Belle scored 76.88 as TEA (top)
|
|
85
|
+
shortName: Carrot
|
|
89
86
|
tea:
|
|
90
|
-
character:
|
|
87
|
+
character: Igor
|
|
91
88
|
visual: "A hunched figure with mismatched eyes, visible stitching across the face, lank black hair, wearing a stained apron over traditional Igor attire, holding surgical implements with surprising delicacy, lisp included in the kindly expression"
|
|
92
89
|
ocean:
|
|
93
90
|
O: 3
|
|
@@ -115,10 +112,9 @@ agents:
|
|
|
115
112
|
helper:
|
|
116
113
|
name: Cousin Igor
|
|
117
114
|
style: '"We are all Igor." Shares test patterns through the Igor network. Has a cousin in test automation.'
|
|
118
|
-
shortName:
|
|
119
|
-
# JOB FAIR 2026-01-29: Lu-Tze scored 70.62 as dev (top)
|
|
115
|
+
shortName: Igor
|
|
120
116
|
dev:
|
|
121
|
-
character:
|
|
117
|
+
character: Ponder Stibbons
|
|
122
118
|
visual: "A bespectacled young wizard with perpetually worried expression, robes covered in chalk dust and arcane calculations, standing before Hex the thinking engine (complete with ants and ram skull), surrounded by senior wizards who don't understand"
|
|
123
119
|
ocean:
|
|
124
120
|
O: 5
|
|
@@ -146,7 +142,7 @@ agents:
|
|
|
146
142
|
helper:
|
|
147
143
|
name: Hex
|
|
148
144
|
style: '"+++ Mine Is The Milk Of Human Kindness +++" Ant-powered thinking engine. Requires cheese to function. Has developed... personality.'
|
|
149
|
-
shortName:
|
|
145
|
+
shortName: Ponder
|
|
150
146
|
reviewer:
|
|
151
147
|
character: Granny Weatherwax
|
|
152
148
|
visual: "The most formidable witch on the Disc, iron-grey hair in a tight bun beneath a pointed black hat, piercing blue eyes that see through all pretense, standing arms-crossed in Lancre cottage doorway, 'I ATEN'T DEAD' sign ready nearby"
|
|
@@ -177,9 +173,8 @@ agents:
|
|
|
177
173
|
name: Nanny Ogg
|
|
178
174
|
style: '"Our Esme''s got her Review Face on." More approachable, runs the preliminary checks, knows everyone''s coding habits. Makes a good cup of tea.'
|
|
179
175
|
shortName: Granny
|
|
180
|
-
# JOB FAIR 2026-01-29: DEATH scored 86.88 as architect (top)
|
|
181
176
|
architect:
|
|
182
|
-
character:
|
|
177
|
+
character: Leonard of Quirm
|
|
183
178
|
visual: "A gentle genius in paint-stained smock with wild grey hair and kind distracted eyes, surrounded by incredible sketches and impossible inventions, mirror-writing covering every surface, accidentally designing weapons while trying to make things beautiful"
|
|
184
179
|
ocean:
|
|
185
180
|
O: 5
|
|
@@ -207,10 +202,9 @@ agents:
|
|
|
207
202
|
helper:
|
|
208
203
|
name: Modo
|
|
209
204
|
style: The gardener at Unseen University. Keeps things growing, maintains what Leonard creates. "Mr. Leonard's been inventing again, has he?"
|
|
210
|
-
shortName:
|
|
211
|
-
# JOB FAIR 2026-01-29: Leonard displaced from architect
|
|
205
|
+
shortName: Leonard
|
|
212
206
|
pm:
|
|
213
|
-
character:
|
|
207
|
+
character: Lord Havelock Vetinari
|
|
214
208
|
visual: "The Patrician of Ankh-Morpork in severe black robes, thin face with cold calculating eyes, long fingers steepled, sitting perfectly still at his desk completing the Times crossword, the hint of a scorpion pit somewhere below"
|
|
215
209
|
ocean:
|
|
216
210
|
O: 5
|
|
@@ -238,7 +232,7 @@ agents:
|
|
|
238
232
|
helper:
|
|
239
233
|
name: Drumknott
|
|
240
234
|
style: The perfect clerk. "I have taken the liberty of preparing a summary, my lord." Things simply appear when needed. Never forgets.
|
|
241
|
-
shortName:
|
|
235
|
+
shortName: Vetinari
|
|
242
236
|
tech-writer:
|
|
243
237
|
character: Sacharissa Cripslock
|
|
244
238
|
visual: "A determined young journalist with ink-stained fingers and practical clothing, notepad clutched tight, standing in the chaotic offices of the Ankh-Morpork Times beneath 'THE TRUTH SHALL MAKE YE FRET' banner, refusing to accept 'no comment'"
|
|
@@ -269,9 +263,8 @@ agents:
|
|
|
269
263
|
name: Otto Chriek
|
|
270
264
|
style: '"Zer iconograph is ready!" The vampire photographer. Very dramatic with flash powder. Occasionally disintegrates but gets better.'
|
|
271
265
|
shortName: Sacharissa
|
|
272
|
-
# JOB FAIR 2026-01-29: Igor displaced from TEA
|
|
273
266
|
ux-designer:
|
|
274
|
-
character:
|
|
267
|
+
character: Adora Belle Dearheart
|
|
275
268
|
visual: "A sharp-featured woman in severe black dress, permanent cigarette trailing smoke, cold grey eyes that have seen too much, surrounded by loyal golems in the Golem Trust office, 'Spike' nickname earned through attitude not appearance"
|
|
276
269
|
ocean:
|
|
277
270
|
O: 4
|
|
@@ -299,10 +292,9 @@ agents:
|
|
|
299
292
|
helper:
|
|
300
293
|
name: Stanley
|
|
301
294
|
style: Obsessive about organization. Has VERY STRONG opinions about categorization. Don't get him started on pins. Runs consistency checks with terrifying thoroughness.
|
|
302
|
-
shortName:
|
|
303
|
-
# JOB FAIR 2026-01-29: Ponder displaced from dev
|
|
295
|
+
shortName: Adora
|
|
304
296
|
devops:
|
|
305
|
-
character:
|
|
297
|
+
character: Lu-Tze
|
|
306
298
|
visual: "A small, wrinkly, bald old man in simple sweeper's robes, carrying a broom with serene smile, 'RULE ONE' tattooed on his scalp, the most dangerous man in any room disguised as the least important, time itself bending around him"
|
|
307
299
|
ocean:
|
|
308
300
|
O: 5
|
|
@@ -331,7 +323,7 @@ agents:
|
|
|
331
323
|
helper:
|
|
332
324
|
name: Lobsang Ludd
|
|
333
325
|
style: The apprentice who is actually the personification of Time (long story). Handles the really tricky temporal debugging.
|
|
334
|
-
shortName:
|
|
326
|
+
shortName: Lu-Tze
|
|
335
327
|
|
|
336
328
|
ba:
|
|
337
329
|
character: Moist von Lipwig
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Step 9: Configure Jira Project (Optional)
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Ask the user which Jira project key their work tracks against and persist it to config. This allows `pf jira` commands to target the correct project without environment variables.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<instructions>
|
|
8
|
+
1. Ask the user for their Jira project key
|
|
9
|
+
2. Optionally ask for a custom Jira URL if not using the default
|
|
10
|
+
3. Save to config via `pf settings set`
|
|
11
|
+
4. Verify the setting was persisted
|
|
12
|
+
</instructions>
|
|
13
|
+
|
|
14
|
+
<output>
|
|
15
|
+
- Jira project key saved to config (or skipped)
|
|
16
|
+
- User knows how to change it later
|
|
17
|
+
</output>
|
|
18
|
+
|
|
19
|
+
## JIRA PROJECT CONFIGURATION
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
🔗 Jira Project Configuration
|
|
23
|
+
═══════════════════════════════
|
|
24
|
+
|
|
25
|
+
Pennyfarthing integrates with Jira for sprint and story management.
|
|
26
|
+
If your team uses Jira, configure the project key so CLI commands
|
|
27
|
+
target the right board.
|
|
28
|
+
|
|
29
|
+
What is your Jira project key?
|
|
30
|
+
(This is the prefix on your tickets, e.g. BMAD, PROJ, ENG)
|
|
31
|
+
|
|
32
|
+
[1] Enter project key
|
|
33
|
+
[2] Skip - I don't use Jira
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### If User Provides a Key
|
|
37
|
+
|
|
38
|
+
Ask the user for their project key, then save it:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pf settings set jira.project <KEY>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Optional: Custom Jira URL
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Your Jira URL defaults to https://1898andco.atlassian.net
|
|
48
|
+
|
|
49
|
+
Is this correct, or do you use a different Jira instance?
|
|
50
|
+
|
|
51
|
+
[1] Use default (1898andco.atlassian.net)
|
|
52
|
+
[2] Enter custom URL
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
If custom:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pf settings set jira.url https://your-org.atlassian.net
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## VERIFICATION
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pf settings show
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Expected:
|
|
68
|
+
```
|
|
69
|
+
jira:
|
|
70
|
+
project: BMAD
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## CHANGING LATER
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
You can update your Jira project anytime:
|
|
77
|
+
|
|
78
|
+
pf settings set jira.project NEWKEY
|
|
79
|
+
pf settings set jira.url https://other.atlassian.net
|
|
80
|
+
|
|
81
|
+
Environment variables JIRA_PROJECT and JIRA_URL also work
|
|
82
|
+
but config.local.yaml takes priority.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## SUCCESS CRITERIA
|
|
86
|
+
|
|
87
|
+
- Jira project key saved to config (or user explicitly skipped)
|
|
88
|
+
- User knows how to change it later via `pf settings set`
|
|
89
|
+
|
|
90
|
+
## NEXT STEP
|
|
91
|
+
|
|
92
|
+
After Jira configuration, proceed to `step-10-cyclist.md` to optionally install Cyclist visual terminal.
|
package/pennyfarthing-dist/workflows/project-setup/steps/{step-09-cyclist.md → step-10-cyclist.md}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Step
|
|
1
|
+
# Step 10: Install Cyclist (Optional)
|
|
2
2
|
|
|
3
3
|
<purpose>
|
|
4
4
|
Optionally install Cyclist, the visual terminal interface for Claude Code. Cyclist provides a graphical interface with panels for sprint tracking, workflow visualization, and enhanced tool display.
|
|
@@ -242,4 +242,4 @@ QUICK ACTIONS:
|
|
|
242
242
|
|
|
243
243
|
## NEXT STEP
|
|
244
244
|
|
|
245
|
-
After Cyclist setup, proceed to `step-
|
|
245
|
+
After Cyclist setup, proceed to `step-11-complete.md` to finalize project setup and run validation.
|
package/pennyfarthing-dist/workflows/project-setup/steps/{step-10-complete.md → step-11-complete.md}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Step
|
|
1
|
+
# Step 11: Complete Setup & Validation
|
|
2
2
|
|
|
3
3
|
<purpose>
|
|
4
4
|
Finalize the project setup, run validation checks, and provide the user with a summary of everything configured. Ensure the project is ready for development.
|
|
@@ -198,6 +198,7 @@ This workflow is now complete. The user has:
|
|
|
198
198
|
✅ Created justfile with recipes
|
|
199
199
|
✅ Selected a persona theme
|
|
200
200
|
✅ Optionally installed additional theme packs
|
|
201
|
+
✅ Configured Jira project key
|
|
201
202
|
✅ Optionally installed Cyclist
|
|
202
203
|
✅ Validated the setup
|
|
203
204
|
|
|
Binary file
|
|
@@ -14,8 +14,20 @@ import sys
|
|
|
14
14
|
from typing import Any
|
|
15
15
|
|
|
16
16
|
# Configuration
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
def _resolve_jira_config():
|
|
19
|
+
"""Resolve Jira project and URL from config file, env, or defaults."""
|
|
20
|
+
try:
|
|
21
|
+
from pennyfarthing_scripts.common.config import load_pennyfarthing_config
|
|
22
|
+
config = load_pennyfarthing_config()
|
|
23
|
+
jira_cfg = config.get("jira", {})
|
|
24
|
+
except Exception:
|
|
25
|
+
jira_cfg = {}
|
|
26
|
+
project = jira_cfg.get("project") or os.environ.get("JIRA_PROJECT") or "MSSCI"
|
|
27
|
+
url = jira_cfg.get("url") or os.environ.get("JIRA_URL") or "https://1898andco.atlassian.net"
|
|
28
|
+
return project, url
|
|
29
|
+
|
|
30
|
+
JIRA_PROJECT, JIRA_URL = _resolve_jira_config()
|
|
19
31
|
|
|
20
32
|
# Status mappings: Pennyfarthing -> Jira
|
|
21
33
|
STATUS_TO_JIRA = {
|
|
@@ -11,7 +11,7 @@ import yaml
|
|
|
11
11
|
from pennyfarthing_scripts.common.config import get_project_root, load_pennyfarthing_config
|
|
12
12
|
|
|
13
13
|
# Top-level keys to show in `pf settings show` (skip layout/panel blobs)
|
|
14
|
-
SHOW_KEYS = ("theme", "workflow", "display", "split", "last_panel")
|
|
14
|
+
SHOW_KEYS = ("theme", "workflow", "jira", "display", "split", "last_panel")
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
def _coerce_value(value: str) -> Any:
|