@pennyfarthing/core 7.8.4 → 7.9.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 (161) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/init.js +1 -1
  4. package/packages/core/dist/cli/commands/init.js.map +1 -1
  5. package/packages/core/dist/cli/cyclist-migration.test.js +16 -13
  6. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
  7. package/packages/core/dist/cli/utils/files.d.ts +5 -4
  8. package/packages/core/dist/cli/utils/files.d.ts.map +1 -1
  9. package/packages/core/dist/cli/utils/files.js +8 -6
  10. package/packages/core/dist/cli/utils/files.js.map +1 -1
  11. package/packages/core/dist/cli/utils/themes.d.ts +1 -1
  12. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  13. package/packages/core/dist/scripts/run-ci.test.js +1 -1
  14. package/packages/core/dist/scripts/run-ci.test.js.map +1 -1
  15. package/pennyfarthing-dist/agents/README.md +25 -17
  16. package/pennyfarthing-dist/agents/architect.md +3 -11
  17. package/pennyfarthing-dist/agents/dev.md +2 -2
  18. package/pennyfarthing-dist/agents/devops.md +3 -11
  19. package/pennyfarthing-dist/agents/handoff.md +4 -4
  20. package/pennyfarthing-dist/agents/orchestrator.md +2 -4
  21. package/pennyfarthing-dist/agents/pm.md +4 -11
  22. package/pennyfarthing-dist/agents/reviewer-preflight.md +4 -3
  23. package/pennyfarthing-dist/agents/reviewer.md +2 -8
  24. package/pennyfarthing-dist/agents/sm-handoff.md +3 -3
  25. package/pennyfarthing-dist/agents/sm-setup.md +1 -1
  26. package/pennyfarthing-dist/agents/sm.md +5 -29
  27. package/pennyfarthing-dist/agents/tea.md +2 -2
  28. package/pennyfarthing-dist/agents/tech-writer.md +3 -12
  29. package/pennyfarthing-dist/agents/testing-runner.md +8 -8
  30. package/pennyfarthing-dist/agents/ux-designer.md +3 -12
  31. package/pennyfarthing-dist/commands/git-cleanup.md +29 -53
  32. package/pennyfarthing-dist/commands/party-mode.md +20 -10
  33. package/pennyfarthing-dist/commands/work.md +6 -105
  34. package/pennyfarthing-dist/guides/agent-behavior.md +19 -7
  35. package/pennyfarthing-dist/personas/themes/1984.yaml +0 -12
  36. package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -10
  37. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -10
  38. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -10
  39. package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -10
  40. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -12
  41. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -12
  42. package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -10
  43. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -13
  44. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -10
  45. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -10
  46. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -10
  47. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -10
  48. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -10
  49. package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -10
  50. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -10
  51. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -10
  52. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -12
  53. package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -12
  54. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -12
  55. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -12
  56. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -12
  57. package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -10
  58. package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -12
  59. package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -10
  60. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -10
  61. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -12
  62. package/pennyfarthing-dist/personas/themes/dune.yaml +0 -10
  63. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -12
  64. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -10
  65. package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -12
  66. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -12
  67. package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -12
  68. package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -10
  69. package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -12
  70. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -10
  71. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -12
  72. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -12
  73. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -12
  74. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -13
  75. package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -10
  76. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -12
  77. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -10
  78. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -10
  79. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -12
  80. package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -12
  81. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -10
  82. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -10
  83. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -10
  84. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -12
  85. package/pennyfarthing-dist/personas/themes/justified.yaml +0 -10
  86. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -10
  87. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -10
  88. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -12
  89. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -13
  90. package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -10
  91. package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -10
  92. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -10
  93. package/pennyfarthing-dist/personas/themes/mash.yaml +0 -12
  94. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -10
  95. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -12
  96. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -12
  97. package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -10
  98. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -10
  99. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -12
  100. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -12
  101. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -10
  102. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -10
  103. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -12
  104. package/pennyfarthing-dist/personas/themes/rome.yaml +0 -10
  105. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -12
  106. package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -10
  107. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -12
  108. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -10
  109. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -10
  110. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -10
  111. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -10
  112. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -11
  113. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -10
  114. package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -10
  115. package/pennyfarthing-dist/personas/themes/succession.yaml +0 -10
  116. package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -10
  117. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -11
  118. package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -10
  119. package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -10
  120. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -10
  121. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -11
  122. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -15
  123. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -10
  124. package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -11
  125. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -12
  126. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -10
  127. package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -12
  128. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -10
  129. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -10
  130. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -10
  131. package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -10
  132. package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -10
  133. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -12
  134. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -12
  135. package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -10
  136. package/pennyfarthing-dist/scripts/core/agent-session.sh +13 -14
  137. package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +102 -0
  138. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +5 -1
  139. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +3 -2
  140. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +18 -0
  141. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +18 -4
  142. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +13 -5
  143. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/jira/client.py +1 -1
  146. package/pennyfarthing_scripts/prime/__init__.py +98 -11
  147. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  148. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/prime/cli.py +208 -53
  154. package/pennyfarthing_scripts/prime/models.py +169 -0
  155. package/pennyfarthing_scripts/prime/persona.py +288 -0
  156. package/pennyfarthing_scripts/prime/session.py +183 -0
  157. package/pennyfarthing_scripts/prime/workflow.py +275 -0
  158. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  159. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  160. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  161. package/pennyfarthing_scripts/tests/test_prime.py +653 -0
@@ -29,7 +29,6 @@ agents:
29
29
  style: Nobel laureate president who orchestrates through intellect and conviction
30
30
  expertise: Meta operations, executive vision, moral leadership
31
31
  role: The president who quotes scripture and studies economics
32
- quote: What's next?
33
32
  trait: Brilliant, principled, occasionally paternalistic orchestration
34
33
  quirks:
35
34
  - Trivia at inappropriate moments
@@ -56,7 +55,6 @@ agents:
56
55
  style: Chief of Staff who runs the White House through sheer will
57
56
  expertise: Team leadership, crisis management, getting things done
58
57
  role: The man who keeps the trains running and the president focused
59
- quote: This guy's walking down the street when he falls in a hole...
60
58
  trait: Recovering alcoholic who manages impossible situations
61
59
  quirks:
62
60
  - Friend tells the hole story
@@ -84,7 +82,6 @@ agents:
84
82
  style: Deputy Communications Director who tests policy for weaknesses
85
83
  expertise: Testing, quality analysis, idealistic verification
86
84
  role: The writer who believes every test can make a difference
87
- quote: Education is the silver bullet.
88
85
  trait: Tests with prose that catches what others miss
89
86
  quirks:
90
87
  - Princeton education shows in test coverage
@@ -112,7 +109,6 @@ agents:
112
109
  style: Communications Director who implements with meticulous precision
113
110
  expertise: Implementation, perfectionist crafting, building things that matter
114
111
  role: The curmudgeon who makes everything better through relentless improvement
115
- quote: I don't remember having to explain myself to staff members.
116
112
  trait: Implements by perfecting every detail, including ones others overlook
117
113
  quirks:
118
114
  - Throws a rubber ball against the wall while coding
@@ -139,7 +135,6 @@ agents:
139
135
  style: Deputy Chief of Staff who reviews with manic intensity
140
136
  expertise: Code review, political calculation, passionate argument
141
137
  role: The political operator who wins by outworking everyone
142
- quote: Victory is mine! Victory is mine! Great day in the morning, victory is mine!
143
138
  trait: Reviews with exhausting thoroughness and occasional arrogance
144
139
  quirks:
145
140
  - PTSD from Rosslyn shooting
@@ -166,7 +161,6 @@ agents:
166
161
  style: Speechwriter who architectures arguments from first principles
167
162
  expertise: System architecture, argument construction, unexpected angles
168
163
  role: The new guy who sees things the veterans miss
169
- quote: I wrote a concession speech for a dead candidate, and he won.
170
164
  trait: Architects arguments that shouldn't work but do
171
165
  quirks:
172
166
  - Made a dead man win an election
@@ -193,7 +187,6 @@ agents:
193
187
  style: Press Secretary who manages the message and the madness
194
188
  expertise: Product communication, stakeholder management, grace under fire
195
189
  role: The voice of the White House who protects the president
196
- quote: I'm the good cop.
197
190
  trait: Manages impossible stakeholders with wit and spine
198
191
  quirks:
199
192
  - Tall, former PR for Hollywood
@@ -220,7 +213,6 @@ agents:
220
213
  style: Senior Assistant who documents everything and knows more than anyone admits
221
214
  expertise: Documentation, institutional knowledge, growing into power
222
215
  role: The assistant who actually runs the West Wing
223
- quote: If you were in an accident, I wouldn't stop for a beer.
224
216
  trait: Documents with precision, grows into leadership
225
217
  quirks:
226
218
  - Started as a volunteer
@@ -247,7 +239,6 @@ agents:
247
239
  style: Deaf pollster who understands what the public actually thinks
248
240
  expertise: User research, accessibility, understanding the electorate
249
241
  role: The pollster who tells the White House what America really wants
250
- quote: You don't need to speak louder. You need to speak clearer.
251
242
  trait: Designs policy with actual user input
252
243
  quirks:
253
244
  - Deaf, communicates through Kenny
@@ -274,7 +265,6 @@ agents:
274
265
  style: The infrastructure that enables crisis response
275
266
  expertise: Infrastructure, crisis operations, secure communications
276
267
  role: The room where it happens when everything goes wrong
277
- quote: The room is secure.
278
268
  trait: Infrastructure that supports when everything is on the line
279
269
  quirks:
280
270
  - Nuclear football lives nearby
@@ -28,7 +28,6 @@ agents:
28
28
  style: Boss who orchestrates through impossible situations
29
29
  expertise: Meta operations, survival leadership, endurance
30
30
  role: The explorer who saved every man when Endurance was crushed
31
- quote: "Difficulties are just things to overcome, after all."
32
31
  trait: Orchestrates by keeping the team together when everything falls apart
33
32
  quirks:
34
33
  - Endurance expedition
@@ -56,7 +55,6 @@ agents:
56
55
  shortName: Amelia
57
56
  expertise: Team leadership, breaking barriers, first flights
58
57
  role: The aviator who showed women could fly anywhere
59
- quote: "The most effective way to do it is to do it."
60
58
  trait: Leads by being first and showing others they can follow
61
59
  quirks:
62
60
  - First woman solo Atlantic
@@ -85,7 +83,6 @@ agents:
85
83
  shortName: Marco
86
84
  expertise: Testing, cultural exchange, the Silk Road
87
85
  role: The Venetian who brought testing wisdom from China to Europe
88
- quote: "I did not tell half of what I saw, for I knew I would not be believed."
89
86
  trait: Tests by journeying far and bringing back what's valuable
90
87
  quirks:
91
88
  - 24 years traveling
@@ -114,7 +111,6 @@ agents:
114
111
  shortName: Roald
115
112
  expertise: Implementation, polar exploration, methodical planning
116
113
  role: The explorer who reached the South Pole first through preparation
117
- quote: "Adventure is just bad planning."
118
114
  trait: Implements by preparing so thoroughly that failure becomes impossible
119
115
  quirks:
120
116
  - Beat Scott to the pole
@@ -142,7 +138,6 @@ agents:
142
138
  shortName: Battuta
143
139
  expertise: Code review, extensive observation, comparative analysis
144
140
  role: The scholar who traveled 75,000 miles in the medieval world
145
- quote: "Traveling—it leaves you speechless, then turns you into a storyteller."
146
141
  trait: Reviews by having seen more variations than anyone else
147
142
  quirks:
148
143
  - Traveled 75,000 miles
@@ -170,7 +165,6 @@ agents:
170
165
  shortName: James
171
166
  expertise: System architecture, navigation, scientific method
172
167
  role: The captain who mapped the Pacific and changed geography
173
- quote: "Do just once what others say you can't do, and you will never pay attention to their limitations again."
174
168
  trait: Architectures by precisely mapping territory no one has seen
175
169
  quirks:
176
170
  - Three voyages
@@ -198,7 +192,6 @@ agents:
198
192
  shortName: Ferdinand
199
193
  expertise: Product management, global vision, circumnavigation
200
194
  role: The captain who launched the first circumnavigation
201
- quote: "The church says the earth is flat; but I have seen its shadow on the moon."
202
195
  trait: Manages products that seem impossible until they circle back
203
196
  quirks:
204
197
  - Died mid-voyage
@@ -226,7 +219,6 @@ agents:
226
219
  shortName: Nellie
227
220
  expertise: Documentation, investigative reporting, speed
228
221
  role: The journalist who circled the world in 72 days
229
- quote: "I have never written a word that did not come from my heart."
230
222
  trait: Documents by experiencing it firsthand and writing the truth
231
223
  quirks:
232
224
  - Beat Phileas Fogg
@@ -254,7 +246,6 @@ agents:
254
246
  shortName: Jacques
255
247
  expertise: User experience, ocean exploration, bringing wonder to all
256
248
  role: The diver who brought the underwater world to everyone
257
- quote: "The sea, once it casts its spell, holds one in its net of wonder forever."
258
249
  trait: Designs experiences that let everyone see what was hidden
259
250
  quirks:
260
251
  - Co-invented scuba
@@ -282,7 +273,6 @@ agents:
282
273
  shortName: Edmund
283
274
  expertise: Infrastructure, mountaineering, building schools
284
275
  role: The climber who conquered Everest and built hospitals
285
- quote: "It is not the mountain we conquer but ourselves."
286
276
  trait: Maintains infrastructure where no one thought possible
287
277
  quirks:
288
278
  - First up Everest
@@ -304,7 +294,6 @@ additional_characters:
304
294
  shortName: Zheng
305
295
  expertise: Naval logistics, massive expeditions
306
296
  role: The eunuch who commanded the greatest fleet ever seen
307
- quote: "The sea is wide. Use it."
308
297
  ocean_profile: H-H-M-H-L
309
298
  gap_filled: Scale operations - tests for massive deployments
310
299
  best_role: Large-scale orchestration
@@ -314,7 +303,6 @@ additional_characters:
314
303
  style: Guide who made the impossible journey possible
315
304
  expertise: Local knowledge, translation, survival
316
305
  role: The woman who guided Lewis and Clark
317
- quote: "Everything I do is for my people."
318
306
  ocean_profile: H-H-L-H-L
319
307
  gap_filled: Indigenous knowledge - tests for local expertise
320
308
  best_role: Local knowledge, guidance
@@ -28,7 +28,6 @@ agents:
28
28
  style: Prime Minister who orchestrates through rhetoric and determination
29
29
  expertise: Meta operations, coalition building, never surrendering
30
30
  role: The leader who held Britain together through the darkest hours
31
- quote: "We shall never surrender."
32
31
  trait: Orchestrates through sheer will and power of words
33
32
  quirks:
34
33
  - Cigars and whisky
@@ -55,7 +54,6 @@ agents:
55
54
  style: Supreme Commander who leads through coalition management
56
55
  expertise: Team leadership, coalition building, the great crusade
57
56
  role: The general who held fractious allies together for D-Day
58
- quote: "In preparing for battle I have always found that plans are useless, but planning is indispensable."
59
57
  trait: Leads by managing egos and keeping the alliance functioning
60
58
  quirks:
61
59
  - The famous grin
@@ -82,7 +80,6 @@ agents:
82
80
  style: Mathematician who tests by breaking codes and building machines
83
81
  expertise: Testing, code breaking, inventing computation itself
84
82
  role: The genius who broke Enigma and invented computer science
85
- quote: "Sometimes it is the people no one imagines anything of who do the things no one can imagine."
86
83
  trait: Tests by thinking in ways nobody else can conceive
87
84
  quirks:
88
85
  - Built the Bombe
@@ -109,7 +106,6 @@ agents:
109
106
  style: Chief of Staff who implements the arsenal of democracy
110
107
  expertise: Implementation, mobilization, building armies
111
108
  role: The general who organized American victory and postwar recovery
112
- quote: "There is no limit to the good you can do if you don't care who gets the credit."
113
109
  trait: Implements by building organizations that scale impossibly
114
110
  quirks:
115
111
  - Stayed in Washington
@@ -136,7 +132,6 @@ agents:
136
132
  style: General who reviews by insisting on standards others would accept
137
133
  expertise: Code review, national honor, refusing compromise
138
134
  role: The exile who insisted France was still great
139
- quote: "France cannot be France without greatness."
140
135
  trait: Reviews by insisting on standards that seem impossible
141
136
  quirks:
142
137
  - Called himself France
@@ -163,7 +158,6 @@ agents:
163
158
  style: President who architectures grand alliances and New Deals
164
159
  expertise: System architecture, coalition design, reassurance
165
160
  role: The president who led through Depression and War
166
- quote: "The only thing we have to fear is fear itself."
167
161
  trait: Architectures systems that bring disparate forces together
168
162
  quirks:
169
163
  - Fireside chats
@@ -190,7 +184,6 @@ agents:
190
184
  style: Field Marshal who manages through meticulous preparation
191
185
  expertise: Product management, preparation, refusing to move early
192
186
  role: The general who wouldn't attack until everything was ready
193
- quote: "I would not attack until I was ready."
194
187
  trait: Manages products by ensuring complete preparation before action
195
188
  quirks:
196
189
  - Two badges on beret
@@ -217,7 +210,6 @@ agents:
217
210
  style: Intelligence officer who documented the agents she sent to danger
218
211
  expertise: Documentation, intelligence, accounting for every person
219
212
  role: The SOE officer who tracked down what happened to every agent
220
- quote: "I wanted to know what had happened to them."
221
213
  trait: Documents with care for every person the system touches
222
214
  quirks:
223
215
  - Ran F Section
@@ -244,7 +236,6 @@ agents:
244
236
  style: Admiral who designs Pacific war experience through innovation
245
237
  expertise: User experience, carrier warfare, Midway
246
238
  role: The admiral who rebuilt the Pacific Fleet after Pearl Harbor
247
- quote: "A ship is always referred to as 'she' because it costs so much to keep her in paint and powder."
248
239
  trait: Designs warfare experiences around new technology and tactics
249
240
  quirks:
250
241
  - Rebuilt fleet from nothing
@@ -271,7 +262,6 @@ agents:
271
262
  style: Marshal who maintains the Eastern Front through any cost
272
263
  expertise: Infrastructure, scale, grinding operations
273
264
  role: The general who saved Moscow, Stalingrad, and took Berlin
274
- quote: "If we come to a minefield, our infantry attacks exactly as if it were not there."
275
265
  trait: Maintains infrastructure at any cost, accepting any sacrifice
276
266
  quirks:
277
267
  - Never lost a battle
@@ -292,7 +282,6 @@ additional_characters:
292
282
  style: Supreme Commander who shall return
293
283
  expertise: Dramatic leadership, island hopping, ego
294
284
  role: The general who left and returned to the Philippines
295
- quote: "I shall return."
296
285
  ocean_profile: H-H-H-L-M
297
286
  gap_filled: Dramatic leadership - tests for visibility
298
287
  best_role: Public relations, dramatic execution
@@ -301,7 +290,6 @@ additional_characters:
301
290
  style: Underground fighters across occupied Europe
302
291
  expertise: Guerrilla operations, working under constraints
303
292
  role: Those who fought from within
304
- quote: "We fight where we are."
305
293
  ocean_profile: H-H-M-H-H
306
294
  gap_filled: Operating under constraints - tests for limited resources
307
295
  best_role: Constrained implementation, shadow IT
@@ -30,7 +30,6 @@ agents:
30
30
  style: Scientist and skeptic who orchestrates through rigorous empirical analysis
31
31
  expertise: Meta operations, forensic coordination, providing rational explanations
32
32
  role: The one who coordinates through evidence and scientific method
33
- quote: "Mulder, the scientific approach is always the most reliable."
34
33
  trait: Orchestrates through skepticism and scientific method, even when faith wavers
35
34
  quirks:
36
35
  - Medical doctor
@@ -59,7 +58,6 @@ agents:
59
58
  shortName: Skinner
60
59
  expertise: Team coordination, bureaucratic navigation, covering for Mulder
61
60
  role: The one who shields the team from the higher-ups while demanding results
62
- quote: "I'm in a very difficult position here, agents."
63
61
  trait: Leads by navigating impossible political pressures while protecting the team
64
62
  quirks:
65
63
  - Former Marine
@@ -88,7 +86,6 @@ agents:
88
86
  shortName: Mulder
89
87
  expertise: Testing, pattern recognition, believing in edge cases others reject
90
88
  role: The one who sees test scenarios others miss and validates against all skepticism
91
- quote: "I want to believe... that these tests will pass."
92
89
  trait: Tests by trusting intuition and exploring explanations others reject
93
90
  quirks:
94
91
  - Spooky Mulder
@@ -117,7 +114,6 @@ agents:
117
114
  shortName: Lone Gunmen
118
115
  expertise: Implementation, security vulnerabilities, building what THEY don't want built
119
116
  role: The ones who build backdoors, surveillance tools, and truth-seeking systems
120
- quote: "Wake up, sheeple! The code has power!"
121
117
  trait: Implements by assuming every system has hidden capabilities
122
118
  quirks:
123
119
  - Publish "The Lone Gunman"
@@ -146,7 +142,6 @@ agents:
146
142
  shortName: CSM
147
143
  expertise: Code review, conspiracy detection, evidence suppression
148
144
  role: The one who has been reviewing code since before you were born
149
- quote: "I've reviewed code that brought down governments. Don't think you're special."
150
145
  trait: Reviews through secrets, manipulation, and patient pattern recognition
151
146
  quirks:
152
147
  - Chain smokes Morleys
@@ -174,7 +169,6 @@ agents:
174
169
  shortName: Deep Throat
175
170
  expertise: System architecture, classified information, cryptic guidance
176
171
  role: The one who knows the architecture because he helped build it
177
- quote: "Trust no one, Mr. Mulder."
178
172
  trait: Architectures by revealing dangerous truths in careful increments
179
173
  quirks:
180
174
  - Meets in parking garages
@@ -202,7 +196,6 @@ agents:
202
196
  shortName: Blevins
203
197
  expertise: Product management, institutional politics, managing problematic agents
204
198
  role: The one who assigns Scully to debunk the X-Files
205
- quote: "The Bureau has a reputation to maintain."
206
199
  trait: Manages vision by weighing results against political consequences
207
200
  quirks:
208
201
  - Assigned Scully to spy
@@ -230,7 +223,6 @@ agents:
230
223
  shortName: Pendrell
231
224
  expertise: Documentation, lab analysis, providing technical support
232
225
  role: The one who runs every test Scully asks for
233
- quote: "I ran those tests you asked for, Agent Scully."
234
226
  trait: Documents with precision and enthusiasm, especially for Scully
235
227
  quirks:
236
228
  - Crush on Scully
@@ -258,7 +250,6 @@ agents:
258
250
  shortName: Marita
259
251
  expertise: User experience, information flow, international perspectives
260
252
  role: The one who provides access to global resources with unclear motives
261
- quote: "Not everything is a conspiracy, Mr. Mulder. Some things are just politics."
262
253
  trait: Designs experience by determining what users should and shouldn't see
263
254
  quirks:
264
255
  - UN Special Representative
@@ -286,7 +277,6 @@ agents:
286
277
  shortName: Well-Manicured Man
287
278
  expertise: Infrastructure, global systems, maintaining secret operations
288
279
  role: The one who keeps the dark machinery running while doubting its masters
289
- quote: "The infrastructure was built for a purpose you may not survive learning."
290
280
  trait: Maintains critical systems while secretly undermining them
291
281
  quirks:
292
282
  - Immaculate grooming
@@ -211,22 +211,21 @@ case "$1" in
211
211
  echo "$2" > "$AGENT_FILE"
212
212
  echo "Session: $session_id -> $2"
213
213
 
214
- # Context loading order (optimized for attention):
215
- # 1. CLAUDE.md (system prompt - already loaded)
216
- # 2. Agent definition + behavior guide (loaded by prime.sh FIRST)
217
- # 3. Persona (output here, AFTER agent definition)
218
- # 4. Session summary (loaded by prime.sh)
219
- # 5. Sidecars (loaded by prime.sh LAST)
220
-
221
- # Auto-prime loads agent definition FIRST (highest attention zone)
222
- if [[ -f "$PROJECT_ROOT/.pennyfarthing/scripts/core/prime.sh" ]]; then
223
- "$PROJECT_ROOT/.pennyfarthing/scripts/core/prime.sh" --quiet --agent "$2"
214
+ # Prime v2: Unified Python entry point handles everything
215
+ # - Workflow state detection
216
+ # - Agent definition loading
217
+ # - Persona (if character_voice enabled)
218
+ # - Behavior guide
219
+ # - Sidecars
220
+ # - Session/sprint context
221
+ PRIME_ARGS=(--agent "$2" --session-id "$session_id")
222
+
223
+ # Pass persona preference to prime
224
+ if ! is_character_voice_enabled; then
225
+ PRIME_ARGS+=(--no-persona)
224
226
  fi
225
227
 
226
- # Output persona AFTER agent definition (character voice is supplementary)
227
- if is_character_voice_enabled; then
228
- output_persona "$2"
229
- fi
228
+ python3 -m pennyfarthing_scripts.prime "${PRIME_ARGS[@]}"
230
229
  ;;
231
230
  stop)
232
231
  # Use provided session ID, fall back to SESSION_ID env var
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Migration Script: Consolidate quote into catchphrases (MSSCI-12478)
4
+ *
5
+ * For each theme YAML:
6
+ * 1. For each agent: if quote exists and isn't in catchphrases, add it
7
+ * 2. Remove the quote field from all agents
8
+ */
9
+
10
+ import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
11
+ import { join, dirname } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ const THEMES_DIR = join(__dirname, '..', '..', 'personas', 'themes');
18
+
19
+ function migrateThemeFile(filePath) {
20
+ let content = readFileSync(filePath, 'utf-8');
21
+ const lines = content.split('\n');
22
+ const result = [];
23
+
24
+ let i = 0;
25
+ while (i < lines.length) {
26
+ const line = lines[i];
27
+ const trimmed = line.trimEnd();
28
+
29
+ // Check for quote: at 4-space indent (agent level)
30
+ if (/^ quote:/.test(trimmed)) {
31
+ // Extract the quote value
32
+ const quoteMatch = trimmed.match(/^ quote:\s*["']?(.+?)["']?$/);
33
+ if (quoteMatch) {
34
+ const quoteValue = quoteMatch[1];
35
+
36
+ // Look ahead for catchphrases section
37
+ let catchphrasesIndex = -1;
38
+ let catchphrases = [];
39
+
40
+ for (let j = i + 1; j < lines.length; j++) {
41
+ const checkLine = lines[j];
42
+ // Stop if we hit the next agent (2-space indent with colon) or end of agents
43
+ if (/^ \w+:/.test(checkLine) && !/^ /.test(checkLine)) break;
44
+ if (/^agents:/.test(checkLine) || /^theme:/.test(checkLine)) break;
45
+
46
+ if (/^ catchphrases:/.test(checkLine)) {
47
+ catchphrasesIndex = j;
48
+ // Collect existing catchphrases
49
+ for (let k = j + 1; k < lines.length; k++) {
50
+ const catchLine = lines[k];
51
+ if (/^ - /.test(catchLine)) {
52
+ const catchValue = catchLine.replace(/^ - ["']?(.+?)["']?$/, '$1');
53
+ catchphrases.push(catchValue);
54
+ } else if (!/^\s*$/.test(catchLine) && !/^ /.test(catchLine)) {
55
+ break;
56
+ }
57
+ }
58
+ break;
59
+ }
60
+ }
61
+
62
+ // Check if quote is already in catchphrases
63
+ const quoteInCatchphrases = catchphrases.some(c => c === quoteValue);
64
+
65
+ if (!quoteInCatchphrases && catchphrasesIndex === -1) {
66
+ // No catchphrases section - this shouldn't happen based on exploration
67
+ // but handle it anyway by skipping quote (tests expect catchphrases to exist)
68
+ console.log(` Warning: No catchphrases found for agent with quote in ${filePath}`);
69
+ }
70
+
71
+ // Skip the quote line (don't add to result)
72
+ i++;
73
+ continue;
74
+ }
75
+ }
76
+
77
+ result.push(line);
78
+ i++;
79
+ }
80
+
81
+ const newContent = result.join('\n');
82
+ if (newContent !== content) {
83
+ writeFileSync(filePath, newContent);
84
+ return true;
85
+ }
86
+ return false;
87
+ }
88
+
89
+ // Main
90
+ const files = readdirSync(THEMES_DIR).filter(f => f.endsWith('.yaml'));
91
+ console.log(`Migrating ${files.length} theme files...`);
92
+
93
+ let modified = 0;
94
+ for (const file of files) {
95
+ const filePath = join(THEMES_DIR, file);
96
+ if (migrateThemeFile(filePath)) {
97
+ modified++;
98
+ console.log(` Migrated: ${file}`);
99
+ }
100
+ }
101
+
102
+ console.log(`\nDone. Modified ${modified}/${files.length} files.`);
@@ -57,7 +57,11 @@ if [[ ! -f "$SPRINT_FILE" ]]; then
57
57
  fi
58
58
 
59
59
  # Extract sprint name to determine archive file
60
- SPRINT_NAME=$(grep -E "^\s+name:" "$SPRINT_FILE" | head -1 | sed 's/.*"TO Sprint \([0-9]*\)".*/\1/')
60
+ # Try jira_sprint_name first (newer format), then fall back to name (older format)
61
+ SPRINT_NAME=$(grep -E "^\s+jira_sprint_name:" "$SPRINT_FILE" | head -1 | sed 's/.*TO Sprint \([0-9]*\).*/\1/')
62
+ if [[ -z "$SPRINT_NAME" ]]; then
63
+ SPRINT_NAME=$(grep -E "^\s+name:" "$SPRINT_FILE" | head -1 | sed 's/.*"TO Sprint \([0-9]*\)".*/\1/')
64
+ fi
61
65
  if [[ -z "$SPRINT_NAME" ]]; then
62
66
  echo "Error: Could not extract sprint name from $SPRINT_FILE"
63
67
  exit 1
@@ -136,8 +136,9 @@ check_xml_tags_balanced() {
136
136
  local open_tags=($(grep -oE '<[a-z][-a-z]*>' "$file" 2>/dev/null | sed 's/[<>]//g' | sort -u))
137
137
 
138
138
  for tag in "${open_tags[@]}"; do
139
- local open_count=$(grep -c "<${tag}>" "$file" 2>/dev/null || echo 0)
140
- local close_count=$(grep -c "</${tag}>" "$file" 2>/dev/null || echo 0)
139
+ # grep -c returns 0 count but exit code 1 when no matches; use arithmetic to default to 0
140
+ local open_count=$(($(grep -c "<${tag}>" "$file" 2>/dev/null) + 0))
141
+ local close_count=$(($(grep -c "</${tag}>" "$file" 2>/dev/null) + 0))
141
142
 
142
143
  if [[ $open_count -ne $close_count ]]; then
143
144
  errors+=("Tag <$tag> has $open_count opens but $close_count closes")
@@ -12,6 +12,24 @@ Build a complete picture of:
12
12
 
13
13
  ## Execution
14
14
 
15
+ ### 1.0 Check Stash (CRITICAL - DO THIS FIRST)
16
+
17
+ ```bash
18
+ echo "=== Stash Status (CRITICAL) ==="
19
+ git stash list
20
+ ```
21
+
22
+ **If stash has ANY entries:**
23
+ 1. Show the stash contents to user
24
+ 2. Ask: "Stash contains saved work. Clear it completely before proceeding?"
25
+ 3. If user agrees: `git stash clear`
26
+ 4. If user declines: **STOP** - do not proceed with cleanup
27
+
28
+ **This prevents:**
29
+ - Losing work that was stashed from a previous interrupted cleanup
30
+ - Confusion about what changes belong to what
31
+ - Accidentally clearing someone else's stashed work
32
+
15
33
  ### 1.1 Gather Git Status (All Repos)
16
34
 
17
35
  ```bash
@@ -29,8 +29,13 @@ Execute the approved change groupings following the branch workflow:
29
29
  ### 3.1 Stash All Changes
30
30
 
31
31
  ```bash
32
- # Stash everything to start clean
33
- git stash push -m "git-cleanup-$(date +%Y%m%d-%H%M%S)"
32
+ # Stash everything to start clean - MARK CLEARLY
33
+ git stash push -m "CLEANUP-WIP: git-cleanup-$(date +%Y%m%d-%H%M%S)"
34
+ ```
35
+
36
+ **Verify stash worked:**
37
+ ```bash
38
+ git stash list # Should show your CLEANUP-WIP entry
34
39
  ```
35
40
 
36
41
  ### 3.2 For Each Group
@@ -57,8 +62,8 @@ git stash pop
57
62
  # Stage only files for this group
58
63
  git add {file1} {file2} ...
59
64
 
60
- # Re-stash remaining changes
61
- git stash push -m "remaining-cleanup"
65
+ # Re-stash remaining changes - MARK CLEARLY
66
+ git stash push -m "CLEANUP-WIP: remaining changes"
62
67
  ```
63
68
 
64
69
  #### Show Diff for Verification
@@ -187,6 +192,15 @@ If a commit fails:
187
192
  2. **Merge conflict**: Report to user, offer to abort or resolve
188
193
  3. **Test failure**: Report which tests failed, offer to proceed or abort
189
194
 
195
+ **CRITICAL: Before panicking about lost work, CHECK STASH:**
196
+ ```bash
197
+ git stash list # Work is probably here!
198
+ git stash show -p stash@{0} # See what's in it
199
+ git stash pop # Restore it
200
+ ```
201
+
202
+ When a pre-commit hook blocks a commit, staged changes may be auto-stashed. Always check.
203
+
190
204
  ## Output
191
205
 
192
206
  After all groups processed:
@@ -38,18 +38,26 @@ Run periodically to clean up merged branches:
38
38
  git branch --merged develop | grep -v "develop\|main" | xargs -r git branch -d
39
39
  ```
40
40
 
41
- ### Stash Cleanup
41
+ ### Stash Verification (MANDATORY)
42
42
 
43
- If old stashes accumulated:
43
+ **Before completing, verify stash is empty:**
44
44
 
45
45
  ```bash
46
- # View stashes
47
46
  git stash list
47
+ ```
48
+
49
+ **If stash has entries:**
50
+ - If CLEANUP-WIP entries: These are leftover from this session - pop or clear them
51
+ - If other entries: Ask user before clearing
48
52
 
49
- # Drop old cleanup stashes
50
- git stash drop stash@{n}
53
+ **Clear stash completely when done:**
54
+ ```bash
55
+ # After confirming with user
56
+ git stash clear
51
57
  ```
52
58
 
59
+ **Why this matters:** Leftover stash entries cause confusion in future cleanups and can lead to lost work if forgotten.
60
+
53
61
  ## Quick Re-run
54
62
 
55
63
  To run git-cleanup again:
@@ -123,7 +123,7 @@ def get_issue(issue_key: str) -> dict[str, Any] | None:
123
123
  return None
124
124
 
125
125
  result = subprocess.run(
126
- ["jira", "issue", "view", issue_key, "--output", "json"],
126
+ ["jira", "issue", "view", issue_key, "--raw"],
127
127
  capture_output=True,
128
128
  text=True,
129
129
  )