@pennyfarthing/core 7.0.2 → 7.4.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.
- package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts +2 -2
- package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/cyclist.js +8 -9
- package/dist/cli/commands/cyclist.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/cyclist.test.js +6 -4
- package/dist/cli/commands/cyclist.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/update.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/update.js +9 -136
- package/dist/cli/commands/update.js.map +1 -0
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js +4 -3
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/constants.d.ts +7 -1
- package/dist/cli/utils/constants.d.ts.map +1 -0
- package/{packages/core/dist → dist}/cli/utils/constants.js +4 -2
- package/{packages/core/dist → dist}/cli/utils/constants.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts +1 -4
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.js +2 -22
- package/dist/cli/utils/themes.js.map +1 -0
- package/dist/cli/utils/themes.test.d.ts +12 -0
- package/{packages/core/dist → dist}/cli/utils/themes.test.js +16 -13
- package/dist/cli/utils/themes.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/workspace.test.js +5 -8
- package/{packages/core/dist → dist}/cli/workspace.test.js.map +1 -1
- package/{packages/core/dist → dist}/index.d.ts +1 -0
- package/{packages/core/dist → dist}/index.d.ts.map +1 -1
- package/{packages/core/dist → dist}/index.js +10 -0
- package/{packages/core/dist → dist}/index.js.map +1 -1
- package/dist/jira/jira-epic-creation.d.ts +109 -0
- package/dist/jira/jira-epic-creation.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.js +253 -0
- package/dist/jira/jira-epic-creation.js.map +1 -0
- package/dist/jira/jira-epic-creation.test.d.ts +16 -0
- package/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.test.js +387 -0
- package/dist/jira/jira-epic-creation.test.js.map +1 -0
- package/dist/jira/jira-sprint-sync.d.ts +247 -0
- package/dist/jira/jira-sprint-sync.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.js +670 -0
- package/dist/jira/jira-sprint-sync.js.map +1 -0
- package/dist/jira/jira-sprint-sync.test.d.ts +16 -0
- package/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.test.js +845 -0
- package/dist/jira/jira-sprint-sync.test.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts +11 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts.map +1 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.js +24 -1
- package/dist/scripts/generate-spider.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.test.js +6 -4
- package/dist/scripts/generate-spider.test.js.map +1 -0
- package/dist/workflow/gate-handler.d.ts +94 -0
- package/dist/workflow/gate-handler.d.ts.map +1 -0
- package/dist/workflow/gate-handler.js +189 -0
- package/dist/workflow/gate-handler.js.map +1 -0
- package/dist/workflow/gate-handler.test.d.ts +14 -0
- package/dist/workflow/gate-handler.test.d.ts.map +1 -0
- package/dist/workflow/gate-handler.test.js +543 -0
- package/dist/workflow/gate-handler.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts +46 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.js +53 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.js.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js +2 -2
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js.map +1 -1
- package/dist/workflow/index.d.ts +16 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +24 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/session-state.d.ts +92 -0
- package/dist/workflow/session-state.d.ts.map +1 -0
- package/dist/workflow/session-state.js +198 -0
- package/dist/workflow/session-state.js.map +1 -0
- package/dist/workflow/session-state.test.d.ts +8 -0
- package/dist/workflow/session-state.test.d.ts.map +1 -0
- package/dist/workflow/session-state.test.js +551 -0
- package/dist/workflow/session-state.test.js.map +1 -0
- package/dist/workflow/step-parser.d.ts +45 -0
- package/dist/workflow/step-parser.d.ts.map +1 -0
- package/dist/workflow/step-parser.js +147 -0
- package/dist/workflow/step-parser.js.map +1 -0
- package/dist/workflow/step-parser.test.d.ts +14 -0
- package/dist/workflow/step-parser.test.d.ts.map +1 -0
- package/dist/workflow/step-parser.test.js +470 -0
- package/dist/workflow/step-parser.test.js.map +1 -0
- package/dist/workflow/trimodal.d.ts +86 -0
- package/dist/workflow/trimodal.d.ts.map +1 -0
- package/dist/workflow/trimodal.js +118 -0
- package/dist/workflow/trimodal.js.map +1 -0
- package/dist/workflow/trimodal.test.d.ts +11 -0
- package/dist/workflow/trimodal.test.d.ts.map +1 -0
- package/dist/workflow/trimodal.test.js +395 -0
- package/dist/workflow/trimodal.test.js.map +1 -0
- package/dist/workflow/variable-resolver.d.ts +67 -0
- package/dist/workflow/variable-resolver.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.js +156 -0
- package/dist/workflow/variable-resolver.js.map +1 -0
- package/dist/workflow/variable-resolver.test.d.ts +14 -0
- package/dist/workflow/variable-resolver.test.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.test.js +400 -0
- package/dist/workflow/variable-resolver.test.js.map +1 -0
- package/dist/workflow/workflow-executor.d.ts +163 -0
- package/dist/workflow/workflow-executor.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.js +197 -0
- package/dist/workflow/workflow-executor.js.map +1 -0
- package/dist/workflow/workflow-executor.test.d.ts +8 -0
- package/dist/workflow/workflow-executor.test.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.test.js +444 -0
- package/dist/workflow/workflow-executor.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-loader.test.js +5 -5
- package/dist/workflow/workflow-loader.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js +8 -9
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js.map +1 -1
- package/dist/workflow/workflow-permissions.d.ts +55 -0
- package/dist/workflow/workflow-permissions.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.js +64 -0
- package/dist/workflow/workflow-permissions.js.map +1 -0
- package/dist/workflow/workflow-permissions.test.d.ts +15 -0
- package/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.test.js +301 -0
- package/dist/workflow/workflow-permissions.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.d.ts +61 -2
- package/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/dist/workflow/workflow-schema.js +454 -0
- package/dist/workflow/workflow-schema.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js +6 -6
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js.map +1 -1
- package/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
- package/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
- package/dist/workflow/workflow-stepped-schema.test.js +608 -0
- package/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
- package/package.json +38 -32
- package/README.md +0 -301
- package/packages/core/dist/cli/commands/cyclist.js.map +0 -1
- package/packages/core/dist/cli/commands/cyclist.test.js.map +0 -1
- package/packages/core/dist/cli/commands/update.js.map +0 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +0 -1
- package/packages/core/dist/cli/utils/themes.js.map +0 -1
- package/packages/core/dist/cli/utils/themes.test.d.ts +0 -12
- package/packages/core/dist/cli/utils/themes.test.js.map +0 -1
- 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/packages/core/dist/scripts/generate-spider.js.map +0 -1
- package/packages/core/dist/scripts/generate-spider.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-loader.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.js +0 -230
- package/packages/core/dist/workflow/workflow-schema.js.map +0 -1
- package/pennyfarthing-dist/agents/README.md +0 -411
- package/pennyfarthing-dist/agents/architect.md +0 -185
- package/pennyfarthing-dist/agents/dev.md +0 -239
- package/pennyfarthing-dist/agents/devops.md +0 -197
- 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/agents/orchestrator.md +0 -333
- package/pennyfarthing-dist/agents/pm.md +0 -164
- package/pennyfarthing-dist/agents/reviewer-preflight.md +0 -182
- package/pennyfarthing-dist/agents/reviewer.md +0 -335
- package/pennyfarthing-dist/agents/sm-file-summary.md +0 -109
- package/pennyfarthing-dist/agents/sm-handoff.md +0 -97
- package/pennyfarthing-dist/agents/sm.md +0 -509
- package/pennyfarthing-dist/agents/tea.md +0 -205
- package/pennyfarthing-dist/agents/tech-writer.md +0 -148
- package/pennyfarthing-dist/agents/testing-runner.md +0 -423
- package/pennyfarthing-dist/agents/ux-designer.md +0 -158
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -332
- package/pennyfarthing-dist/commands/architect.md +0 -62
- package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
- package/pennyfarthing-dist/commands/benchmark.md +0 -467
- package/pennyfarthing-dist/commands/brainstorm.md +0 -91
- package/pennyfarthing-dist/commands/check.md +0 -156
- package/pennyfarthing-dist/commands/chore.md +0 -178
- package/pennyfarthing-dist/commands/close-epic.md +0 -136
- package/pennyfarthing-dist/commands/continue-session.md +0 -184
- package/pennyfarthing-dist/commands/create-branches-from-story.md +0 -374
- package/pennyfarthing-dist/commands/create-theme.md +0 -29
- package/pennyfarthing-dist/commands/dev.md +0 -60
- package/pennyfarthing-dist/commands/devops.md +0 -59
- package/pennyfarthing-dist/commands/git-cleanup.md +0 -340
- package/pennyfarthing-dist/commands/health-check.md +0 -108
- package/pennyfarthing-dist/commands/help.md +0 -264
- package/pennyfarthing-dist/commands/job-fair.md +0 -102
- package/pennyfarthing-dist/commands/list-themes.md +0 -17
- package/pennyfarthing-dist/commands/new-work.md +0 -127
- package/pennyfarthing-dist/commands/orchestrator.md +0 -56
- package/pennyfarthing-dist/commands/parallel-work.md +0 -71
- package/pennyfarthing-dist/commands/party-mode.md +0 -67
- package/pennyfarthing-dist/commands/permissions.md +0 -193
- package/pennyfarthing-dist/commands/pm.md +0 -60
- package/pennyfarthing-dist/commands/prime.md +0 -140
- package/pennyfarthing-dist/commands/release.md +0 -58
- package/pennyfarthing-dist/commands/repo-status.md +0 -49
- package/pennyfarthing-dist/commands/retro.md +0 -200
- package/pennyfarthing-dist/commands/reviewer.md +0 -64
- package/pennyfarthing-dist/commands/run-ci.md +0 -116
- package/pennyfarthing-dist/commands/set-theme.md +0 -52
- package/pennyfarthing-dist/commands/show-theme.md +0 -21
- package/pennyfarthing-dist/commands/sm.md +0 -70
- package/pennyfarthing-dist/commands/solo.md +0 -411
- package/pennyfarthing-dist/commands/sprint-planning.md +0 -109
- package/pennyfarthing-dist/commands/start-epic.md +0 -156
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +0 -184
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +0 -376
- package/pennyfarthing-dist/commands/tea.md +0 -63
- package/pennyfarthing-dist/commands/tech-writer.md +0 -53
- package/pennyfarthing-dist/commands/theme-maker.md +0 -671
- package/pennyfarthing-dist/commands/update-domain-docs.md +0 -83
- package/pennyfarthing-dist/commands/ux-designer.md +0 -62
- package/pennyfarthing-dist/commands/work.md +0 -111
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +0 -480
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
- package/pennyfarthing-dist/guides/HOOKS.md +0 -230
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +0 -338
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +0 -193
- package/pennyfarthing-dist/guides/agent-template-strategic.md +0 -148
- package/pennyfarthing-dist/guides/agent-template-tactical.md +0 -162
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +0 -746
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +0 -574
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +0 -488
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +0 -402
- package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
- package/pennyfarthing-dist/guides/persona-loading.md +0 -46
- 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/guides/workflow-schema.md +0 -195
- package/pennyfarthing-dist/guides/worktree-mode.md +0 -113
- package/pennyfarthing-dist/output-styles/teaching.md +0 -33
- package/pennyfarthing-dist/output-styles/terse.md +0 -20
- package/pennyfarthing-dist/output-styles/verbose.md +0 -28
- package/pennyfarthing-dist/personas/themes/1984.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -207
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -295
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -327
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -316
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -310
- package/pennyfarthing-dist/personas/themes/control.yaml +0 -197
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -323
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/dune.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -328
- package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -243
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -324
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -287
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/justified.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -219
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -299
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -355
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/mash.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -329
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -242
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -298
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -220
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/rome.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -318
- package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -301
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -230
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -210
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/succession.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -208
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -236
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -213
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -322
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -353
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -311
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -302
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -302
- package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -264
- package/pennyfarthing-dist/scripts/agent-session.sh +0 -367
- package/pennyfarthing-dist/scripts/check-context.sh +0 -187
- package/pennyfarthing-dist/scripts/check.sh +0 -497
- package/pennyfarthing-dist/scripts/deploy.sh +0 -284
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -395
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -61
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -66
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -35
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -166
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -50
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -71
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -54
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -98
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -59
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -91
- package/pennyfarthing-dist/scripts/prime.sh +0 -161
- package/pennyfarthing-dist/scripts/release.sh +0 -198
- package/pennyfarthing-dist/scripts/repo-utils.sh +0 -778
- package/pennyfarthing-dist/scripts/run-ci.sh +0 -219
- package/pennyfarthing-dist/scripts/run.sh +0 -65
- package/pennyfarthing-dist/scripts/statusline.sh +0 -264
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -582
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -107
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -597
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -514
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -517
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -331
- package/pennyfarthing-dist/scripts/uninstall.sh +0 -271
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -177
- package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -251
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -136
- package/pennyfarthing-dist/scripts/utils/common.sh +0 -157
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -230
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -269
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -231
- package/pennyfarthing-dist/scripts/utils/find-root.sh +0 -33
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -110
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -127
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +0 -289
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -443
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -208
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -198
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -162
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -463
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -74
- package/pennyfarthing-dist/scripts/utils/logging.sh +0 -186
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -141
- package/pennyfarthing-dist/scripts/utils/retry.sh +0 -76
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -7
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -319
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -193
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -286
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -241
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -400
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -16
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -337
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -160
- package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -498
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +0 -236
- package/pennyfarthing-dist/skills/changelog/SKILL.md +0 -367
- package/pennyfarthing-dist/skills/code-review/SKILL.md +0 -168
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +0 -268
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +0 -171
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +0 -421
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -258
- package/pennyfarthing-dist/skills/jira/SKILL.md +0 -281
- package/pennyfarthing-dist/skills/judge/SKILL.md +0 -524
- package/pennyfarthing-dist/skills/just/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +0 -240
- package/pennyfarthing-dist/skills/otel/skill.md +0 -222
- package/pennyfarthing-dist/skills/permissions/skill.md +0 -172
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -173
- package/pennyfarthing-dist/skills/skill-registry.schema.json +0 -102
- package/pennyfarthing-dist/skills/skill-registry.yaml +0 -335
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
- package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
- package/pennyfarthing-dist/skills/testing/SKILL.md +0 -99
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +0 -124
- package/pennyfarthing-dist/skills/theme/skill.md +0 -129
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +0 -169
- package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/yq/SKILL.md +0 -264
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +0 -187
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +0 -59
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -276
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +0 -61
- package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
- package/pennyfarthing-dist/templates/preferences.yaml.template +0 -15
- package/pennyfarthing-dist/templates/settings.local.json.template +0 -90
- package/pennyfarthing-dist/templates/setup-env.sh.template +0 -18
- package/pennyfarthing-dist/templates/shared-context.md.template +0 -70
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +0 -40
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +0 -37
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +0 -34
- package/pennyfarthing-dist/workflows/agent-docs.yaml +0 -70
- package/pennyfarthing-dist/workflows/bdd.yaml +0 -58
- package/pennyfarthing-dist/workflows/tdd.yaml +0 -50
- package/pennyfarthing-dist/workflows/trivial.yaml +0 -40
- /package/{packages/core/bin → bin}/pennyfarthing.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/update.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.js +0 -0
- /package/{packages/core/dist → dist}/cli/index.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/themes.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts.map +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Story 47-1: Auto-create Jira epic on local epic creation
|
|
3
|
+
*
|
|
4
|
+
* These tests define the contract for automatically creating Jira epics
|
|
5
|
+
* when SM setup detects an epic without a jira field in sprint YAML.
|
|
6
|
+
*
|
|
7
|
+
* Acceptance Criteria:
|
|
8
|
+
* 1. SM setup detects new epic without jira field
|
|
9
|
+
* 2. Automatically creates Jira epic with matching title/description
|
|
10
|
+
* 3. Updates sprint YAML with new Jira key
|
|
11
|
+
* 4. Epic number derived from Jira ticket number
|
|
12
|
+
*
|
|
13
|
+
* Run with: npm test
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
16
|
+
import assert from 'node:assert';
|
|
17
|
+
import { mkdirSync, rmSync, existsSync, writeFileSync, readFileSync } from 'node:fs';
|
|
18
|
+
import { join, dirname } from 'node:path';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
// Get directory for test fixtures
|
|
21
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
const TEST_DIR = join(__dirname, '__test_jira_epic_creation__');
|
|
23
|
+
// Import the jira epic creation functions (to be implemented)
|
|
24
|
+
import { createEpicInJira, ensureEpicHasJiraKey, extractEpicNumberFromJiraKey, updateSprintYamlWithJiraKey } from './jira-epic-creation.js';
|
|
25
|
+
describe('Jira Epic Creation (47-1)', () => {
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
if (existsSync(TEST_DIR)) {
|
|
28
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
31
|
+
});
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
if (existsSync(TEST_DIR)) {
|
|
34
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
describe('createEpicInJira() - Create epic in Jira', () => {
|
|
38
|
+
it('should create epic with title and description', async () => {
|
|
39
|
+
// AC2: Automatically creates Jira epic with matching title/description
|
|
40
|
+
const result = await createEpicInJira({
|
|
41
|
+
title: 'Test Epic',
|
|
42
|
+
description: 'This is a test epic for automated creation',
|
|
43
|
+
labels: ['pennyfarthing'],
|
|
44
|
+
// Mock mode for testing without real Jira
|
|
45
|
+
_mockResponse: {
|
|
46
|
+
key: 'MSSCI-12345',
|
|
47
|
+
url: 'https://1898andco.atlassian.net/browse/MSSCI-12345'
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
assert.strictEqual(result.success, true, 'Creation should succeed');
|
|
51
|
+
assert.ok(result.jiraKey, 'Should return Jira key');
|
|
52
|
+
assert.strictEqual(result.jiraKey, 'MSSCI-12345');
|
|
53
|
+
assert.ok(result.url, 'Should return URL');
|
|
54
|
+
});
|
|
55
|
+
it('should format epic title with epic number prefix', async () => {
|
|
56
|
+
// AC2: Epic title should include epic number for clarity
|
|
57
|
+
const result = await createEpicInJira({
|
|
58
|
+
epicNumber: 47,
|
|
59
|
+
title: 'Jira-Pennyfarthing Sync Improvements',
|
|
60
|
+
description: 'Improve sync between Jira and Pennyfarthing sprint YAML',
|
|
61
|
+
labels: ['pennyfarthing'],
|
|
62
|
+
_mockResponse: { key: 'MSSCI-11798' }
|
|
63
|
+
});
|
|
64
|
+
assert.strictEqual(result.success, true);
|
|
65
|
+
// The formatted title should be passed to Jira
|
|
66
|
+
assert.ok(result.formattedTitle?.includes('Epic 47'), 'Title should include epic number');
|
|
67
|
+
});
|
|
68
|
+
it('should include pennyfarthing label by default', async () => {
|
|
69
|
+
const result = await createEpicInJira({
|
|
70
|
+
title: 'Test Epic',
|
|
71
|
+
description: 'Test description',
|
|
72
|
+
_mockResponse: { key: 'MSSCI-12345' }
|
|
73
|
+
});
|
|
74
|
+
assert.strictEqual(result.success, true);
|
|
75
|
+
assert.ok(result.labels?.includes('pennyfarthing'), 'Should include pennyfarthing label');
|
|
76
|
+
});
|
|
77
|
+
it('should handle Jira API errors gracefully', async () => {
|
|
78
|
+
const result = await createEpicInJira({
|
|
79
|
+
title: 'Test Epic',
|
|
80
|
+
description: 'Test description',
|
|
81
|
+
_mockError: 'Connection refused'
|
|
82
|
+
});
|
|
83
|
+
assert.strictEqual(result.success, false);
|
|
84
|
+
assert.ok(result.error, 'Should have error message');
|
|
85
|
+
assert.ok(result.error?.includes('Connection'), 'Error should be descriptive');
|
|
86
|
+
});
|
|
87
|
+
it('should support dry-run mode', async () => {
|
|
88
|
+
const result = await createEpicInJira({
|
|
89
|
+
title: 'Dry Run Epic',
|
|
90
|
+
description: 'This should not actually be created',
|
|
91
|
+
dryRun: true
|
|
92
|
+
});
|
|
93
|
+
assert.strictEqual(result.success, true);
|
|
94
|
+
assert.strictEqual(result.dryRun, true);
|
|
95
|
+
assert.ok(!result.jiraKey, 'Should not have real Jira key in dry-run');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('ensureEpicHasJiraKey() - Check and create if missing', () => {
|
|
99
|
+
it('should return existing jira key without creating', async () => {
|
|
100
|
+
// AC1: SM setup detects new epic without jira field
|
|
101
|
+
// This tests the "has jira field" case
|
|
102
|
+
const epic = {
|
|
103
|
+
id: 'epic-35',
|
|
104
|
+
title: 'Cyclist UI/UX Improvements',
|
|
105
|
+
jira: 'MSSCI-11715'
|
|
106
|
+
};
|
|
107
|
+
const result = await ensureEpicHasJiraKey({
|
|
108
|
+
epic,
|
|
109
|
+
_mockResponse: { key: 'MSSCI-99999' } // Should not be used
|
|
110
|
+
});
|
|
111
|
+
assert.strictEqual(result.success, true);
|
|
112
|
+
assert.strictEqual(result.jiraKey, 'MSSCI-11715', 'Should return existing key');
|
|
113
|
+
assert.strictEqual(result.created, false, 'Should not have created new epic');
|
|
114
|
+
});
|
|
115
|
+
it('should create Jira epic when jira field is missing', async () => {
|
|
116
|
+
// AC1: SM setup detects new epic without jira field
|
|
117
|
+
// AC2: Automatically creates Jira epic
|
|
118
|
+
const epic = {
|
|
119
|
+
id: 'epic-48',
|
|
120
|
+
title: 'New Feature Epic',
|
|
121
|
+
// No jira field!
|
|
122
|
+
};
|
|
123
|
+
const result = await ensureEpicHasJiraKey({
|
|
124
|
+
epic,
|
|
125
|
+
_mockResponse: { key: 'MSSCI-11850' }
|
|
126
|
+
});
|
|
127
|
+
assert.strictEqual(result.success, true);
|
|
128
|
+
assert.strictEqual(result.jiraKey, 'MSSCI-11850');
|
|
129
|
+
assert.strictEqual(result.created, true, 'Should indicate epic was created');
|
|
130
|
+
});
|
|
131
|
+
it('should handle empty string jira field as missing', async () => {
|
|
132
|
+
const epic = {
|
|
133
|
+
id: 'epic-49',
|
|
134
|
+
title: 'Empty Jira Field Epic',
|
|
135
|
+
jira: '' // Empty string should be treated as missing
|
|
136
|
+
};
|
|
137
|
+
const result = await ensureEpicHasJiraKey({
|
|
138
|
+
epic,
|
|
139
|
+
_mockResponse: { key: 'MSSCI-11851' }
|
|
140
|
+
});
|
|
141
|
+
assert.strictEqual(result.success, true);
|
|
142
|
+
assert.strictEqual(result.created, true, 'Empty jira field should trigger creation');
|
|
143
|
+
});
|
|
144
|
+
it('should handle null jira field as missing', async () => {
|
|
145
|
+
const epic = {
|
|
146
|
+
id: 'epic-50',
|
|
147
|
+
title: 'Null Jira Field Epic',
|
|
148
|
+
jira: null // Null should be treated as missing
|
|
149
|
+
};
|
|
150
|
+
const result = await ensureEpicHasJiraKey({
|
|
151
|
+
epic,
|
|
152
|
+
_mockResponse: { key: 'MSSCI-11852' }
|
|
153
|
+
});
|
|
154
|
+
assert.strictEqual(result.success, true);
|
|
155
|
+
assert.strictEqual(result.created, true, 'Null jira field should trigger creation');
|
|
156
|
+
});
|
|
157
|
+
it('should extract epic number from id for title formatting', async () => {
|
|
158
|
+
const epic = {
|
|
159
|
+
id: 'epic-47', // Contains the epic number
|
|
160
|
+
title: 'Jira-Pennyfarthing Sync Improvements'
|
|
161
|
+
};
|
|
162
|
+
const result = await ensureEpicHasJiraKey({
|
|
163
|
+
epic,
|
|
164
|
+
_mockResponse: { key: 'MSSCI-11853' }
|
|
165
|
+
});
|
|
166
|
+
assert.strictEqual(result.success, true);
|
|
167
|
+
// Should have used epic number 47 in the title
|
|
168
|
+
assert.ok(result.formattedTitle?.includes('47'), 'Should extract and use epic number from id');
|
|
169
|
+
});
|
|
170
|
+
it('should use description from epic if available', async () => {
|
|
171
|
+
const epic = {
|
|
172
|
+
id: 'epic-51',
|
|
173
|
+
title: 'Epic with Description',
|
|
174
|
+
description: 'This is the epic description that should be used'
|
|
175
|
+
};
|
|
176
|
+
const result = await ensureEpicHasJiraKey({
|
|
177
|
+
epic,
|
|
178
|
+
_mockResponse: { key: 'MSSCI-11854' }
|
|
179
|
+
});
|
|
180
|
+
assert.strictEqual(result.success, true);
|
|
181
|
+
assert.ok(result.description?.includes('epic description'), 'Should use epic description');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('extractEpicNumberFromJiraKey() - Derive epic number', () => {
|
|
185
|
+
it('should extract number from Jira key', () => {
|
|
186
|
+
// AC4: Epic number derived from Jira ticket number
|
|
187
|
+
const epicNumber = extractEpicNumberFromJiraKey('MSSCI-11796');
|
|
188
|
+
assert.strictEqual(epicNumber, 11796);
|
|
189
|
+
});
|
|
190
|
+
it('should handle different project prefixes', () => {
|
|
191
|
+
const epicNumber = extractEpicNumberFromJiraKey('TEST-123');
|
|
192
|
+
assert.strictEqual(epicNumber, 123);
|
|
193
|
+
});
|
|
194
|
+
it('should return null for invalid format', () => {
|
|
195
|
+
const epicNumber = extractEpicNumberFromJiraKey('invalid-key');
|
|
196
|
+
assert.strictEqual(epicNumber, null);
|
|
197
|
+
});
|
|
198
|
+
it('should return null for empty input', () => {
|
|
199
|
+
const epicNumber = extractEpicNumberFromJiraKey('');
|
|
200
|
+
assert.strictEqual(epicNumber, null);
|
|
201
|
+
});
|
|
202
|
+
it('should return null for null input', () => {
|
|
203
|
+
const epicNumber = extractEpicNumberFromJiraKey(null);
|
|
204
|
+
assert.strictEqual(epicNumber, null);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('updateSprintYamlWithJiraKey() - Update YAML', () => {
|
|
208
|
+
it('should add jira field to epic in sprint YAML', async () => {
|
|
209
|
+
// AC3: Updates sprint YAML with new Jira key
|
|
210
|
+
const sprintYaml = `sprint:
|
|
211
|
+
number: 11
|
|
212
|
+
epics:
|
|
213
|
+
- id: epic-47
|
|
214
|
+
title: Jira-Pennyfarthing Sync Improvements
|
|
215
|
+
points: 15
|
|
216
|
+
status: in_progress
|
|
217
|
+
stories:
|
|
218
|
+
- id: 47-1
|
|
219
|
+
title: Auto-create Jira epic
|
|
220
|
+
status: backlog
|
|
221
|
+
`;
|
|
222
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
223
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
224
|
+
const result = await updateSprintYamlWithJiraKey({
|
|
225
|
+
sprintPath,
|
|
226
|
+
epicId: 'epic-47',
|
|
227
|
+
jiraKey: 'MSSCI-11796'
|
|
228
|
+
});
|
|
229
|
+
assert.strictEqual(result.success, true, 'Update should succeed');
|
|
230
|
+
// Verify the file was updated
|
|
231
|
+
const updatedContent = readFileSync(sprintPath, 'utf-8');
|
|
232
|
+
assert.ok(updatedContent.includes('jira: MSSCI-11796'), 'YAML should contain new jira key');
|
|
233
|
+
});
|
|
234
|
+
it('should not modify other fields when adding jira key', async () => {
|
|
235
|
+
const sprintYaml = `sprint:
|
|
236
|
+
number: 11
|
|
237
|
+
epics:
|
|
238
|
+
- id: epic-47
|
|
239
|
+
title: Test Epic Title
|
|
240
|
+
points: 15
|
|
241
|
+
priority: P1
|
|
242
|
+
status: in_progress
|
|
243
|
+
`;
|
|
244
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
245
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
246
|
+
await updateSprintYamlWithJiraKey({
|
|
247
|
+
sprintPath,
|
|
248
|
+
epicId: 'epic-47',
|
|
249
|
+
jiraKey: 'MSSCI-11800'
|
|
250
|
+
});
|
|
251
|
+
const updatedContent = readFileSync(sprintPath, 'utf-8');
|
|
252
|
+
assert.ok(updatedContent.includes('title: Test Epic Title'), 'Title should be preserved');
|
|
253
|
+
assert.ok(updatedContent.includes('points: 15'), 'Points should be preserved');
|
|
254
|
+
assert.ok(updatedContent.includes('priority: P1'), 'Priority should be preserved');
|
|
255
|
+
});
|
|
256
|
+
it('should handle epic id without "epic-" prefix', async () => {
|
|
257
|
+
// Epic IDs can be "47" or "epic-47"
|
|
258
|
+
const sprintYaml = `sprint:
|
|
259
|
+
number: 11
|
|
260
|
+
epics:
|
|
261
|
+
- id: "47"
|
|
262
|
+
title: Numeric ID Epic
|
|
263
|
+
status: in_progress
|
|
264
|
+
`;
|
|
265
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
266
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
267
|
+
const result = await updateSprintYamlWithJiraKey({
|
|
268
|
+
sprintPath,
|
|
269
|
+
epicId: '47',
|
|
270
|
+
jiraKey: 'MSSCI-11801'
|
|
271
|
+
});
|
|
272
|
+
assert.strictEqual(result.success, true);
|
|
273
|
+
const updatedContent = readFileSync(sprintPath, 'utf-8');
|
|
274
|
+
assert.ok(updatedContent.includes('jira: MSSCI-11801'));
|
|
275
|
+
});
|
|
276
|
+
it('should fail gracefully if epic not found', async () => {
|
|
277
|
+
const sprintYaml = `sprint:
|
|
278
|
+
number: 11
|
|
279
|
+
epics:
|
|
280
|
+
- id: epic-35
|
|
281
|
+
title: Different Epic
|
|
282
|
+
`;
|
|
283
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
284
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
285
|
+
const result = await updateSprintYamlWithJiraKey({
|
|
286
|
+
sprintPath,
|
|
287
|
+
epicId: 'epic-99', // Does not exist
|
|
288
|
+
jiraKey: 'MSSCI-11802'
|
|
289
|
+
});
|
|
290
|
+
assert.strictEqual(result.success, false);
|
|
291
|
+
assert.ok(result.error?.includes('not found'), 'Should mention epic not found');
|
|
292
|
+
});
|
|
293
|
+
it('should not overwrite existing jira key unless forced', async () => {
|
|
294
|
+
const sprintYaml = `sprint:
|
|
295
|
+
number: 11
|
|
296
|
+
epics:
|
|
297
|
+
- id: epic-47
|
|
298
|
+
title: Epic with Existing Jira
|
|
299
|
+
jira: MSSCI-11700
|
|
300
|
+
`;
|
|
301
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
302
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
303
|
+
const result = await updateSprintYamlWithJiraKey({
|
|
304
|
+
sprintPath,
|
|
305
|
+
epicId: 'epic-47',
|
|
306
|
+
jiraKey: 'MSSCI-11803'
|
|
307
|
+
});
|
|
308
|
+
assert.strictEqual(result.success, false);
|
|
309
|
+
assert.ok(result.error?.includes('already has'), 'Should not overwrite existing key');
|
|
310
|
+
// Verify original key preserved
|
|
311
|
+
const updatedContent = readFileSync(sprintPath, 'utf-8');
|
|
312
|
+
assert.ok(updatedContent.includes('jira: MSSCI-11700'), 'Original key should be preserved');
|
|
313
|
+
});
|
|
314
|
+
it('should overwrite existing jira key when force option is true', async () => {
|
|
315
|
+
const sprintYaml = `sprint:
|
|
316
|
+
number: 11
|
|
317
|
+
epics:
|
|
318
|
+
- id: epic-47
|
|
319
|
+
title: Epic with Existing Jira
|
|
320
|
+
jira: MSSCI-11700
|
|
321
|
+
`;
|
|
322
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
323
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
324
|
+
const result = await updateSprintYamlWithJiraKey({
|
|
325
|
+
sprintPath,
|
|
326
|
+
epicId: 'epic-47',
|
|
327
|
+
jiraKey: 'MSSCI-11804',
|
|
328
|
+
force: true
|
|
329
|
+
});
|
|
330
|
+
assert.strictEqual(result.success, true);
|
|
331
|
+
const updatedContent = readFileSync(sprintPath, 'utf-8');
|
|
332
|
+
assert.ok(updatedContent.includes('jira: MSSCI-11804'), 'Should have new key with force option');
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
describe('SM Setup Integration', () => {
|
|
336
|
+
it('should detect epic without jira during story setup', async () => {
|
|
337
|
+
// AC1: SM setup detects new epic without jira field
|
|
338
|
+
// This tests the integration point in generic-sm-setup
|
|
339
|
+
const sprintYaml = `sprint:
|
|
340
|
+
number: 11
|
|
341
|
+
epics:
|
|
342
|
+
- id: epic-48
|
|
343
|
+
title: New Epic Without Jira
|
|
344
|
+
status: in_progress
|
|
345
|
+
stories:
|
|
346
|
+
- id: 48-1
|
|
347
|
+
title: First Story
|
|
348
|
+
status: backlog
|
|
349
|
+
points: 3
|
|
350
|
+
`;
|
|
351
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
352
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
353
|
+
// Import the SM setup check function (to be added)
|
|
354
|
+
// This would be called during MODE=setup before story setup
|
|
355
|
+
const { checkEpicJiraRequired } = await import('./jira-epic-creation.js');
|
|
356
|
+
const result = await checkEpicJiraRequired({
|
|
357
|
+
storyId: '48-1',
|
|
358
|
+
sprintPath
|
|
359
|
+
});
|
|
360
|
+
assert.strictEqual(result.epicNeedsJira, true, 'Should detect epic needs Jira key');
|
|
361
|
+
assert.strictEqual(result.epicId, 'epic-48');
|
|
362
|
+
assert.strictEqual(result.epicTitle, 'New Epic Without Jira');
|
|
363
|
+
});
|
|
364
|
+
it('should not flag epic that already has jira key', async () => {
|
|
365
|
+
const sprintYaml = `sprint:
|
|
366
|
+
number: 11
|
|
367
|
+
epics:
|
|
368
|
+
- id: epic-35
|
|
369
|
+
title: Epic With Jira
|
|
370
|
+
jira: MSSCI-11715
|
|
371
|
+
stories:
|
|
372
|
+
- id: 35-1
|
|
373
|
+
title: Story in Epic With Jira
|
|
374
|
+
status: backlog
|
|
375
|
+
`;
|
|
376
|
+
const sprintPath = join(TEST_DIR, 'current-sprint.yaml');
|
|
377
|
+
writeFileSync(sprintPath, sprintYaml);
|
|
378
|
+
const { checkEpicJiraRequired } = await import('./jira-epic-creation.js');
|
|
379
|
+
const result = await checkEpicJiraRequired({
|
|
380
|
+
storyId: '35-1',
|
|
381
|
+
sprintPath
|
|
382
|
+
});
|
|
383
|
+
assert.strictEqual(result.epicNeedsJira, false, 'Should not flag epic that has jira key');
|
|
384
|
+
});
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
//# sourceMappingURL=jira-epic-creation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-epic-creation.test.js","sourceRoot":"","sources":["../../src/jira/jira-epic-creation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jira Sprint Sync Functions
|
|
3
|
+
*
|
|
4
|
+
* Story 47-2: Sync sprint numbers with Jira sprint IDs
|
|
5
|
+
*
|
|
6
|
+
* These functions enable bidirectional sprint tracking between
|
|
7
|
+
* Pennyfarthing's local sprint YAML and Jira's sprint system.
|
|
8
|
+
*/
|
|
9
|
+
export interface JiraSprintInfo {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
state: 'active' | 'closed' | 'future';
|
|
13
|
+
startDate?: string;
|
|
14
|
+
endDate?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SprintIssue {
|
|
17
|
+
key: string;
|
|
18
|
+
summary: string;
|
|
19
|
+
status: string;
|
|
20
|
+
points?: number;
|
|
21
|
+
labels?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface SprintVelocityMetrics {
|
|
24
|
+
totalPoints: number;
|
|
25
|
+
completedPoints: number;
|
|
26
|
+
remainingPoints: number;
|
|
27
|
+
velocityPercentage?: number;
|
|
28
|
+
issueCount?: number;
|
|
29
|
+
completedCount?: number;
|
|
30
|
+
byStatus?: Record<string, {
|
|
31
|
+
count: number;
|
|
32
|
+
points: number;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export interface SprintSyncResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
error?: string;
|
|
38
|
+
warning?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface AddJiraSprintIdOptions {
|
|
41
|
+
sprintPath: string;
|
|
42
|
+
jiraSprintId: number;
|
|
43
|
+
force?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface AddJiraSprintIdResult extends SprintSyncResult {
|
|
46
|
+
previousId?: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Add or update jira_sprint_id field in sprint YAML
|
|
50
|
+
*/
|
|
51
|
+
export declare function addJiraSprintIdToYaml(options: AddJiraSprintIdOptions): Promise<AddJiraSprintIdResult>;
|
|
52
|
+
export interface GetJiraSprintInfoOptions {
|
|
53
|
+
sprintId: number;
|
|
54
|
+
_mockResponse?: JiraSprintInfo | null;
|
|
55
|
+
_mockError?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface GetJiraSprintInfoResult extends SprintSyncResult {
|
|
58
|
+
sprint?: JiraSprintInfo;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get sprint details from Jira
|
|
62
|
+
*/
|
|
63
|
+
export declare function getJiraSprintInfo(options: GetJiraSprintInfoOptions): Promise<GetJiraSprintInfoResult>;
|
|
64
|
+
export interface GetSprintIssuesOptions {
|
|
65
|
+
sprintId: number;
|
|
66
|
+
label?: string;
|
|
67
|
+
_mockResponse?: SprintIssue[];
|
|
68
|
+
_mockError?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface GetSprintIssuesResult extends SprintSyncResult {
|
|
71
|
+
issues?: SprintIssue[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get all issues in a Jira sprint
|
|
75
|
+
*/
|
|
76
|
+
export declare function getSprintIssues(options: GetSprintIssuesOptions): Promise<GetSprintIssuesResult>;
|
|
77
|
+
export interface IsStoryInJiraSprintOptions {
|
|
78
|
+
jiraKey: string;
|
|
79
|
+
sprintId: number;
|
|
80
|
+
_mockResponse?: boolean;
|
|
81
|
+
_mockError?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface IsStoryInJiraSprintResult extends SprintSyncResult {
|
|
84
|
+
inSprint?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a specific story is in a Jira sprint
|
|
88
|
+
*/
|
|
89
|
+
export declare function isStoryInJiraSprint(options: IsStoryInJiraSprintOptions): Promise<IsStoryInJiraSprintResult>;
|
|
90
|
+
export interface GetSprintVelocityOptions {
|
|
91
|
+
sprintId: number;
|
|
92
|
+
_mockResponse?: SprintVelocityMetrics;
|
|
93
|
+
_mockError?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface GetSprintVelocityResult extends SprintSyncResult {
|
|
96
|
+
metrics?: SprintVelocityMetrics;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get velocity metrics from Jira sprint
|
|
100
|
+
*/
|
|
101
|
+
export declare function getSprintVelocityFromJira(options: GetSprintVelocityOptions): Promise<GetSprintVelocityResult>;
|
|
102
|
+
export interface ValidateSprintAlignmentOptions {
|
|
103
|
+
sprintPath: string;
|
|
104
|
+
_mockJiraSprint?: JiraSprintInfo | null;
|
|
105
|
+
_mockError?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ValidateSprintAlignmentResult extends SprintSyncResult {
|
|
108
|
+
aligned?: boolean;
|
|
109
|
+
localSprintName?: string;
|
|
110
|
+
jiraSprintId?: number;
|
|
111
|
+
jiraSprintName?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate that local sprint name matches Jira sprint name
|
|
115
|
+
*/
|
|
116
|
+
export declare function validateSprintAlignment(options: ValidateSprintAlignmentOptions): Promise<ValidateSprintAlignmentResult>;
|
|
117
|
+
export interface MissingStory extends SprintIssue {
|
|
118
|
+
storyId: string;
|
|
119
|
+
}
|
|
120
|
+
export interface GetYamlStoryIdsOptions {
|
|
121
|
+
sprintPath: string;
|
|
122
|
+
}
|
|
123
|
+
export interface GetYamlStoryIdsResult extends SprintSyncResult {
|
|
124
|
+
storyIds?: string[];
|
|
125
|
+
}
|
|
126
|
+
export interface FindJiraOnlyStoriesOptions {
|
|
127
|
+
jiraIssues: SprintIssue[];
|
|
128
|
+
yamlStoryIds: string[];
|
|
129
|
+
filterLabel?: string;
|
|
130
|
+
}
|
|
131
|
+
export interface FindJiraOnlyStoriesResult extends SprintSyncResult {
|
|
132
|
+
missingStories?: MissingStory[];
|
|
133
|
+
}
|
|
134
|
+
export interface FormatMissingStoriesReportOptions {
|
|
135
|
+
missingStories: MissingStory[];
|
|
136
|
+
jiraBaseUrl?: string;
|
|
137
|
+
}
|
|
138
|
+
export interface FormatMissingStoriesReportResult extends SprintSyncResult {
|
|
139
|
+
report?: string;
|
|
140
|
+
}
|
|
141
|
+
export interface ImportMissingStoriesToYamlOptions {
|
|
142
|
+
sprintPath: string;
|
|
143
|
+
missingStories: MissingStory[];
|
|
144
|
+
targetEpicId: string;
|
|
145
|
+
dryRun?: boolean;
|
|
146
|
+
}
|
|
147
|
+
export interface ImportMissingStoriesToYamlResult extends SprintSyncResult {
|
|
148
|
+
importedCount?: number;
|
|
149
|
+
wouldImport?: MissingStory[];
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Extract all story IDs from sprint YAML file
|
|
153
|
+
*/
|
|
154
|
+
export declare function getYamlStoryIds(options: GetYamlStoryIdsOptions): Promise<GetYamlStoryIdsResult>;
|
|
155
|
+
/**
|
|
156
|
+
* Find stories that are in Jira but not in the sprint YAML
|
|
157
|
+
*/
|
|
158
|
+
export declare function findJiraOnlyStories(options: FindJiraOnlyStoriesOptions): Promise<FindJiraOnlyStoriesResult>;
|
|
159
|
+
/**
|
|
160
|
+
* Generate a human-readable report of missing stories
|
|
161
|
+
*/
|
|
162
|
+
export declare function formatMissingStoriesReport(options: FormatMissingStoriesReportOptions): Promise<FormatMissingStoriesReportResult>;
|
|
163
|
+
/**
|
|
164
|
+
* Import missing stories from Jira into sprint YAML
|
|
165
|
+
*/
|
|
166
|
+
export declare function importMissingStoriesToYaml(options: ImportMissingStoriesToYamlOptions): Promise<ImportMissingStoriesToYamlResult>;
|
|
167
|
+
export interface StorySprintMembership {
|
|
168
|
+
storyId: string;
|
|
169
|
+
jiraKey: string;
|
|
170
|
+
inSprint: boolean;
|
|
171
|
+
jiraSprintId?: number;
|
|
172
|
+
}
|
|
173
|
+
export interface SyncStorySprintMembershipOptions {
|
|
174
|
+
sprintPath: string;
|
|
175
|
+
jiraSprintId: number;
|
|
176
|
+
_mockJiraIssues?: SprintIssue[];
|
|
177
|
+
_mockError?: string;
|
|
178
|
+
}
|
|
179
|
+
export interface SyncStorySprintMembershipResult extends SprintSyncResult {
|
|
180
|
+
updated?: number;
|
|
181
|
+
added?: string[];
|
|
182
|
+
removed?: string[];
|
|
183
|
+
unchanged?: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Sync story sprint membership between YAML and Jira
|
|
187
|
+
*
|
|
188
|
+
* Direction: Jira → YAML
|
|
189
|
+
* - Stories in Jira sprint get in_sprint: true
|
|
190
|
+
* - Stories not in Jira sprint get in_sprint: false
|
|
191
|
+
*/
|
|
192
|
+
export declare function syncStorySprintMembershipFromJira(options: SyncStorySprintMembershipOptions): Promise<SyncStorySprintMembershipResult>;
|
|
193
|
+
export interface AddStoryToJiraSprintOptions {
|
|
194
|
+
jiraKey: string;
|
|
195
|
+
sprintId: number;
|
|
196
|
+
_mockSuccess?: boolean;
|
|
197
|
+
_mockError?: string;
|
|
198
|
+
}
|
|
199
|
+
export interface AddStoryToJiraSprintResult extends SprintSyncResult {
|
|
200
|
+
added?: boolean;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Add a story to a Jira sprint
|
|
204
|
+
*
|
|
205
|
+
* Direction: YAML → Jira
|
|
206
|
+
* Uses: jira sprint add {sprintId} {jiraKey}
|
|
207
|
+
*/
|
|
208
|
+
export declare function addStoryToJiraSprint(options: AddStoryToJiraSprintOptions): Promise<AddStoryToJiraSprintResult>;
|
|
209
|
+
export interface RemoveStoryFromJiraSprintOptions {
|
|
210
|
+
jiraKey: string;
|
|
211
|
+
_mockSuccess?: boolean;
|
|
212
|
+
_mockError?: string;
|
|
213
|
+
}
|
|
214
|
+
export interface RemoveStoryFromJiraSprintResult extends SprintSyncResult {
|
|
215
|
+
removed?: boolean;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Remove a story from its current Jira sprint (move to backlog)
|
|
219
|
+
*
|
|
220
|
+
* Direction: YAML → Jira
|
|
221
|
+
* Uses: jira issue edit {jiraKey} --sprint "" or move to backlog
|
|
222
|
+
*/
|
|
223
|
+
export declare function removeStoryFromJiraSprint(options: RemoveStoryFromJiraSprintOptions): Promise<RemoveStoryFromJiraSprintResult>;
|
|
224
|
+
export interface SyncStorySprintMembershipToJiraOptions {
|
|
225
|
+
sprintPath: string;
|
|
226
|
+
jiraSprintId: number;
|
|
227
|
+
dryRun?: boolean;
|
|
228
|
+
_mockAddSuccess?: boolean;
|
|
229
|
+
_mockRemoveSuccess?: boolean;
|
|
230
|
+
_mockError?: string;
|
|
231
|
+
}
|
|
232
|
+
export interface SyncStorySprintMembershipToJiraResult extends SprintSyncResult {
|
|
233
|
+
toAdd?: string[];
|
|
234
|
+
toRemove?: string[];
|
|
235
|
+
added?: string[];
|
|
236
|
+
removed?: string[];
|
|
237
|
+
failed?: string[];
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Sync story sprint membership from YAML to Jira
|
|
241
|
+
*
|
|
242
|
+
* Direction: YAML → Jira
|
|
243
|
+
* - Stories with in_sprint: true are added to Jira sprint
|
|
244
|
+
* - Stories with in_sprint: false are removed from Jira sprint
|
|
245
|
+
*/
|
|
246
|
+
export declare function syncStorySprintMembershipToJira(options: SyncStorySprintMembershipToJiraOptions): Promise<SyncStorySprintMembershipToJiraResult>;
|
|
247
|
+
//# sourceMappingURL=jira-sprint-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-sprint-sync.d.ts","sourceRoot":"","sources":["../../src/jira/jira-sprint-sync.ts"],"names":[],"mappings":"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"}
|