@pennyfarthing/core 7.4.0 → 7.5.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/dist/cli/utils/files.d.ts +0 -1
- package/dist/cli/utils/files.js +73 -56
- package/dist/cli/utils/manifest.d.ts +0 -1
- package/dist/cli/utils/manifest.js +48 -45
- package/dist/cli/utils/version.d.ts +0 -1
- package/dist/cli/utils/version.js +38 -32
- package/dist/index.d.ts +0 -1
- package/dist/index.js +39 -11
- package/dist/permissions/index.d.ts +0 -1
- package/dist/permissions/index.js +7 -4
- package/dist/permissions/permission-schema.d.ts +0 -1
- package/dist/permissions/permission-schema.js +13 -9
- package/dist/scripts/job-fair-aggregator.d.ts +0 -1
- package/dist/scripts/job-fair-aggregator.js +484 -341
- package/dist/workflow/index.d.ts +0 -1
- package/dist/workflow/index.js +12 -5
- package/dist/workflow/workflow-loader.d.ts +0 -1
- package/dist/workflow/workflow-loader.js +40 -34
- package/dist/workflow/workflow-permissions.d.ts +0 -1
- package/dist/workflow/workflow-permissions.js +14 -8
- package/dist/workflow/workflow-router.d.ts +0 -1
- package/dist/workflow/workflow-router.js +70 -51
- package/dist/workflow/workflow-schema.d.ts +0 -1
- package/dist/workflow/workflow-schema.js +62 -59
- package/package.json +1 -1
- package/dist/bmad/context-reader.d.ts +0 -71
- package/dist/bmad/context-reader.d.ts.map +0 -1
- package/dist/bmad/context-reader.js +0 -369
- package/dist/bmad/context-reader.js.map +0 -1
- package/dist/bmad/context-reader.test.d.ts +0 -71
- package/dist/bmad/context-reader.test.d.ts.map +0 -1
- package/dist/bmad/context-reader.test.js +0 -878
- package/dist/bmad/context-reader.test.js.map +0 -1
- package/dist/bmad/epics-parser.d.ts +0 -61
- package/dist/bmad/epics-parser.d.ts.map +0 -1
- package/dist/bmad/epics-parser.js +0 -331
- package/dist/bmad/epics-parser.js.map +0 -1
- package/dist/bmad/epics-parser.test.d.ts +0 -7
- package/dist/bmad/epics-parser.test.d.ts.map +0 -1
- package/dist/bmad/epics-parser.test.js +0 -449
- package/dist/bmad/epics-parser.test.js.map +0 -1
- package/dist/bmad/index.d.ts +0 -11
- package/dist/bmad/index.d.ts.map +0 -1
- package/dist/bmad/index.js +0 -24
- package/dist/bmad/index.js.map +0 -1
- package/dist/bmad/status-sync.d.ts +0 -173
- package/dist/bmad/status-sync.d.ts.map +0 -1
- package/dist/bmad/status-sync.js +0 -463
- package/dist/bmad/status-sync.js.map +0 -1
- package/dist/bmad/status-sync.test.d.ts +0 -7
- package/dist/bmad/status-sync.test.d.ts.map +0 -1
- package/dist/bmad/status-sync.test.js +0 -702
- package/dist/bmad/status-sync.test.js.map +0 -1
- package/dist/bmad/story-exporter.d.ts +0 -55
- package/dist/bmad/story-exporter.d.ts.map +0 -1
- package/dist/bmad/story-exporter.js +0 -170
- package/dist/bmad/story-exporter.js.map +0 -1
- package/dist/bmad/story-exporter.test.d.ts +0 -51
- package/dist/bmad/story-exporter.test.d.ts.map +0 -1
- package/dist/bmad/story-exporter.test.js +0 -603
- package/dist/bmad/story-exporter.test.js.map +0 -1
- package/dist/bmad/story-parser.d.ts +0 -44
- package/dist/bmad/story-parser.d.ts.map +0 -1
- package/dist/bmad/story-parser.js +0 -307
- package/dist/bmad/story-parser.js.map +0 -1
- package/dist/bmad/story-parser.test.d.ts +0 -44
- package/dist/bmad/story-parser.test.d.ts.map +0 -1
- package/dist/bmad/story-parser.test.js +0 -693
- package/dist/bmad/story-parser.test.js.map +0 -1
- package/dist/cli/commands/command.d.ts +0 -28
- package/dist/cli/commands/command.d.ts.map +0 -1
- package/dist/cli/commands/command.js +0 -399
- package/dist/cli/commands/command.js.map +0 -1
- package/dist/cli/commands/cyclist.d.ts +0 -46
- package/dist/cli/commands/cyclist.d.ts.map +0 -1
- package/dist/cli/commands/cyclist.js +0 -196
- package/dist/cli/commands/cyclist.js.map +0 -1
- package/dist/cli/commands/cyclist.test.d.ts +0 -13
- package/dist/cli/commands/cyclist.test.d.ts.map +0 -1
- package/dist/cli/commands/cyclist.test.js +0 -245
- package/dist/cli/commands/cyclist.test.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -9
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/doctor.js +0 -652
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -524
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/skill.d.ts +0 -28
- package/dist/cli/commands/skill.d.ts.map +0 -1
- package/dist/cli/commands/skill.js +0 -416
- package/dist/cli/commands/skill.js.map +0 -1
- package/dist/cli/commands/theme.d.ts +0 -21
- package/dist/cli/commands/theme.d.ts.map +0 -1
- package/dist/cli/commands/theme.js +0 -201
- package/dist/cli/commands/theme.js.map +0 -1
- package/dist/cli/commands/uninstall.d.ts +0 -8
- package/dist/cli/commands/uninstall.d.ts.map +0 -1
- package/dist/cli/commands/uninstall.js +0 -237
- package/dist/cli/commands/uninstall.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -9
- package/dist/cli/commands/update.d.ts.map +0 -1
- package/dist/cli/commands/update.js +0 -418
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/version.d.ts +0 -2
- package/dist/cli/commands/version.d.ts.map +0 -1
- package/dist/cli/commands/version.js +0 -28
- package/dist/cli/commands/version.js.map +0 -1
- package/dist/cli/customization.test.d.ts +0 -12
- package/dist/cli/customization.test.d.ts.map +0 -1
- package/dist/cli/customization.test.js +0 -84
- package/dist/cli/customization.test.js.map +0 -1
- package/dist/cli/cyclist-migration.test.d.ts +0 -16
- package/dist/cli/cyclist-migration.test.d.ts.map +0 -1
- package/dist/cli/cyclist-migration.test.js +0 -225
- package/dist/cli/cyclist-migration.test.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -174
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ocean-profiles.test.d.ts +0 -13
- package/dist/cli/ocean-profiles.test.d.ts.map +0 -1
- package/dist/cli/ocean-profiles.test.js +0 -134
- package/dist/cli/ocean-profiles.test.js.map +0 -1
- package/dist/cli/theme-maker.test.d.ts +0 -11
- package/dist/cli/theme-maker.test.d.ts.map +0 -1
- package/dist/cli/theme-maker.test.js +0 -356
- package/dist/cli/theme-maker.test.js.map +0 -1
- package/dist/cli/utils/constants.d.ts +0 -66
- package/dist/cli/utils/constants.d.ts.map +0 -1
- package/dist/cli/utils/constants.js +0 -54
- package/dist/cli/utils/constants.js.map +0 -1
- package/dist/cli/utils/files.d.ts.map +0 -1
- package/dist/cli/utils/files.js.map +0 -1
- package/dist/cli/utils/logger.d.ts +0 -26
- package/dist/cli/utils/logger.d.ts.map +0 -1
- package/dist/cli/utils/logger.js +0 -88
- package/dist/cli/utils/logger.js.map +0 -1
- package/dist/cli/utils/manifest.d.ts.map +0 -1
- package/dist/cli/utils/manifest.js.map +0 -1
- package/dist/cli/utils/node-modules.d.ts +0 -6
- package/dist/cli/utils/node-modules.d.ts.map +0 -1
- package/dist/cli/utils/node-modules.js +0 -31
- package/dist/cli/utils/node-modules.js.map +0 -1
- package/dist/cli/utils/prompts.d.ts +0 -34
- package/dist/cli/utils/prompts.d.ts.map +0 -1
- package/dist/cli/utils/prompts.js +0 -93
- package/dist/cli/utils/prompts.js.map +0 -1
- package/dist/cli/utils/symlinks.d.ts +0 -29
- package/dist/cli/utils/symlinks.d.ts.map +0 -1
- package/dist/cli/utils/symlinks.js +0 -181
- package/dist/cli/utils/symlinks.js.map +0 -1
- package/dist/cli/utils/themes.d.ts +0 -101
- package/dist/cli/utils/themes.d.ts.map +0 -1
- package/dist/cli/utils/themes.js +0 -373
- package/dist/cli/utils/themes.js.map +0 -1
- package/dist/cli/utils/themes.test.d.ts +0 -12
- package/dist/cli/utils/themes.test.d.ts.map +0 -1
- package/dist/cli/utils/themes.test.js +0 -147
- package/dist/cli/utils/themes.test.js.map +0 -1
- package/dist/cli/utils/version.d.ts.map +0 -1
- package/dist/cli/utils/version.js.map +0 -1
- package/dist/cli/workspace.test.d.ts +0 -8
- package/dist/cli/workspace.test.d.ts.map +0 -1
- package/dist/cli/workspace.test.js +0 -151
- package/dist/cli/workspace.test.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jira/jira-epic-creation.d.ts +0 -109
- package/dist/jira/jira-epic-creation.d.ts.map +0 -1
- package/dist/jira/jira-epic-creation.js +0 -253
- package/dist/jira/jira-epic-creation.js.map +0 -1
- package/dist/jira/jira-epic-creation.test.d.ts +0 -16
- package/dist/jira/jira-epic-creation.test.d.ts.map +0 -1
- package/dist/jira/jira-epic-creation.test.js +0 -387
- package/dist/jira/jira-epic-creation.test.js.map +0 -1
- package/dist/jira/jira-sprint-sync.d.ts +0 -247
- package/dist/jira/jira-sprint-sync.d.ts.map +0 -1
- package/dist/jira/jira-sprint-sync.js +0 -670
- package/dist/jira/jira-sprint-sync.js.map +0 -1
- package/dist/jira/jira-sprint-sync.test.d.ts +0 -16
- package/dist/jira/jira-sprint-sync.test.d.ts.map +0 -1
- package/dist/jira/jira-sprint-sync.test.js +0 -845
- package/dist/jira/jira-sprint-sync.test.js.map +0 -1
- package/dist/permissions/index.d.ts.map +0 -1
- package/dist/permissions/index.js.map +0 -1
- package/dist/permissions/permission-schema.d.ts.map +0 -1
- package/dist/permissions/permission-schema.js.map +0 -1
- package/dist/permissions/permission-schema.test.d.ts +0 -40
- package/dist/permissions/permission-schema.test.d.ts.map +0 -1
- package/dist/permissions/permission-schema.test.js +0 -367
- package/dist/permissions/permission-schema.test.js.map +0 -1
- package/dist/scripts/add-ocean-profiles.d.ts +0 -9
- package/dist/scripts/add-ocean-profiles.d.ts.map +0 -1
- package/dist/scripts/add-ocean-profiles.js +0 -695
- package/dist/scripts/add-ocean-profiles.js.map +0 -1
- package/dist/scripts/benchmark-integration.d.ts +0 -182
- package/dist/scripts/benchmark-integration.d.ts.map +0 -1
- package/dist/scripts/benchmark-integration.js +0 -691
- package/dist/scripts/benchmark-integration.js.map +0 -1
- package/dist/scripts/benchmark-integration.test.d.ts +0 -13
- package/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
- package/dist/scripts/benchmark-integration.test.js +0 -680
- package/dist/scripts/benchmark-integration.test.js.map +0 -1
- package/dist/scripts/debugging-scenarios.test.d.ts +0 -18
- package/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
- package/dist/scripts/debugging-scenarios.test.js +0 -317
- package/dist/scripts/debugging-scenarios.test.js.map +0 -1
- package/dist/scripts/generate-all-spiders.d.ts +0 -10
- package/dist/scripts/generate-all-spiders.d.ts.map +0 -1
- package/dist/scripts/generate-all-spiders.js +0 -306
- package/dist/scripts/generate-all-spiders.js.map +0 -1
- package/dist/scripts/generate-report.d.ts +0 -65
- package/dist/scripts/generate-report.d.ts.map +0 -1
- package/dist/scripts/generate-report.js +0 -378
- package/dist/scripts/generate-report.js.map +0 -1
- package/dist/scripts/generate-report.test.d.ts +0 -13
- package/dist/scripts/generate-report.test.d.ts.map +0 -1
- package/dist/scripts/generate-report.test.js +0 -363
- package/dist/scripts/generate-report.test.js.map +0 -1
- package/dist/scripts/generate-spider-report.d.ts +0 -65
- package/dist/scripts/generate-spider-report.d.ts.map +0 -1
- package/dist/scripts/generate-spider-report.js +0 -366
- package/dist/scripts/generate-spider-report.js.map +0 -1
- package/dist/scripts/generate-spider-report.test.d.ts +0 -13
- package/dist/scripts/generate-spider-report.test.d.ts.map +0 -1
- package/dist/scripts/generate-spider-report.test.js +0 -367
- package/dist/scripts/generate-spider-report.test.js.map +0 -1
- package/dist/scripts/generate-spider.d.ts +0 -47
- package/dist/scripts/generate-spider.d.ts.map +0 -1
- package/dist/scripts/generate-spider.js +0 -338
- package/dist/scripts/generate-spider.js.map +0 -1
- package/dist/scripts/generate-spider.test.d.ts +0 -14
- package/dist/scripts/generate-spider.test.d.ts.map +0 -1
- package/dist/scripts/generate-spider.test.js +0 -271
- package/dist/scripts/generate-spider.test.js.map +0 -1
- package/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
- package/dist/scripts/job-fair-aggregator.js.map +0 -1
- package/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
- package/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
- package/dist/scripts/job-fair-aggregator.test.js +0 -616
- package/dist/scripts/job-fair-aggregator.test.js.map +0 -1
- package/dist/scripts/run-ci.test.d.ts +0 -20
- package/dist/scripts/run-ci.test.d.ts.map +0 -1
- package/dist/scripts/run-ci.test.js +0 -127
- package/dist/scripts/run-ci.test.js.map +0 -1
- package/dist/scripts/theme-detail.test.d.ts +0 -10
- package/dist/scripts/theme-detail.test.d.ts.map +0 -1
- package/dist/scripts/theme-detail.test.js +0 -199
- package/dist/scripts/theme-detail.test.js.map +0 -1
- package/dist/scripts/validate-ocean-profiles.d.ts +0 -9
- package/dist/scripts/validate-ocean-profiles.d.ts.map +0 -1
- package/dist/scripts/validate-ocean-profiles.js +0 -130
- package/dist/scripts/validate-ocean-profiles.js.map +0 -1
- package/dist/workflow/gate-handler.d.ts +0 -94
- package/dist/workflow/gate-handler.d.ts.map +0 -1
- package/dist/workflow/gate-handler.js +0 -189
- package/dist/workflow/gate-handler.js.map +0 -1
- package/dist/workflow/gate-handler.test.d.ts +0 -14
- package/dist/workflow/gate-handler.test.d.ts.map +0 -1
- package/dist/workflow/gate-handler.test.js +0 -543
- package/dist/workflow/gate-handler.test.js.map +0 -1
- package/dist/workflow/generic-handoff.d.ts +0 -281
- package/dist/workflow/generic-handoff.d.ts.map +0 -1
- package/dist/workflow/generic-handoff.js +0 -411
- package/dist/workflow/generic-handoff.js.map +0 -1
- package/dist/workflow/generic-handoff.test.d.ts +0 -21
- package/dist/workflow/generic-handoff.test.d.ts.map +0 -1
- package/dist/workflow/generic-handoff.test.js +0 -499
- package/dist/workflow/generic-handoff.test.js.map +0 -1
- package/dist/workflow/generic-sm-finish.d.ts +0 -89
- package/dist/workflow/generic-sm-finish.d.ts.map +0 -1
- package/dist/workflow/generic-sm-finish.js +0 -157
- package/dist/workflow/generic-sm-finish.js.map +0 -1
- package/dist/workflow/generic-sm-setup.d.ts +0 -138
- package/dist/workflow/generic-sm-setup.d.ts.map +0 -1
- package/dist/workflow/generic-sm-setup.js +0 -382
- package/dist/workflow/generic-sm-setup.js.map +0 -1
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/session-state.d.ts +0 -92
- package/dist/workflow/session-state.d.ts.map +0 -1
- package/dist/workflow/session-state.js +0 -198
- package/dist/workflow/session-state.js.map +0 -1
- package/dist/workflow/session-state.test.d.ts +0 -8
- package/dist/workflow/session-state.test.d.ts.map +0 -1
- package/dist/workflow/session-state.test.js +0 -551
- package/dist/workflow/session-state.test.js.map +0 -1
- package/dist/workflow/sm-subagents.test.d.ts +0 -23
- package/dist/workflow/sm-subagents.test.d.ts.map +0 -1
- package/dist/workflow/sm-subagents.test.js +0 -727
- package/dist/workflow/sm-subagents.test.js.map +0 -1
- package/dist/workflow/step-parser.d.ts +0 -45
- package/dist/workflow/step-parser.d.ts.map +0 -1
- package/dist/workflow/step-parser.js +0 -147
- package/dist/workflow/step-parser.js.map +0 -1
- package/dist/workflow/step-parser.test.d.ts +0 -14
- package/dist/workflow/step-parser.test.d.ts.map +0 -1
- package/dist/workflow/step-parser.test.js +0 -470
- package/dist/workflow/step-parser.test.js.map +0 -1
- package/dist/workflow/story-workflow-routing.test.d.ts +0 -17
- package/dist/workflow/story-workflow-routing.test.d.ts.map +0 -1
- package/dist/workflow/story-workflow-routing.test.js +0 -559
- package/dist/workflow/story-workflow-routing.test.js.map +0 -1
- package/dist/workflow/test-cache.d.ts +0 -131
- package/dist/workflow/test-cache.d.ts.map +0 -1
- package/dist/workflow/test-cache.js +0 -226
- package/dist/workflow/test-cache.js.map +0 -1
- package/dist/workflow/test-cache.test.d.ts +0 -17
- package/dist/workflow/test-cache.test.d.ts.map +0 -1
- package/dist/workflow/test-cache.test.js +0 -438
- package/dist/workflow/test-cache.test.js.map +0 -1
- package/dist/workflow/trimodal.d.ts +0 -86
- package/dist/workflow/trimodal.d.ts.map +0 -1
- package/dist/workflow/trimodal.js +0 -118
- package/dist/workflow/trimodal.js.map +0 -1
- package/dist/workflow/trimodal.test.d.ts +0 -11
- package/dist/workflow/trimodal.test.d.ts.map +0 -1
- package/dist/workflow/trimodal.test.js +0 -395
- package/dist/workflow/trimodal.test.js.map +0 -1
- package/dist/workflow/variable-resolver.d.ts +0 -67
- package/dist/workflow/variable-resolver.d.ts.map +0 -1
- package/dist/workflow/variable-resolver.js +0 -156
- package/dist/workflow/variable-resolver.js.map +0 -1
- package/dist/workflow/variable-resolver.test.d.ts +0 -14
- package/dist/workflow/variable-resolver.test.d.ts.map +0 -1
- package/dist/workflow/variable-resolver.test.js +0 -400
- package/dist/workflow/variable-resolver.test.js.map +0 -1
- package/dist/workflow/workflow-executor.d.ts +0 -163
- package/dist/workflow/workflow-executor.d.ts.map +0 -1
- package/dist/workflow/workflow-executor.js +0 -197
- package/dist/workflow/workflow-executor.js.map +0 -1
- package/dist/workflow/workflow-executor.test.d.ts +0 -8
- package/dist/workflow/workflow-executor.test.d.ts.map +0 -1
- package/dist/workflow/workflow-executor.test.js +0 -444
- package/dist/workflow/workflow-executor.test.js.map +0 -1
- package/dist/workflow/workflow-loader.d.ts.map +0 -1
- package/dist/workflow/workflow-loader.js.map +0 -1
- package/dist/workflow/workflow-loader.test.d.ts +0 -15
- package/dist/workflow/workflow-loader.test.d.ts.map +0 -1
- package/dist/workflow/workflow-loader.test.js +0 -354
- package/dist/workflow/workflow-loader.test.js.map +0 -1
- package/dist/workflow/workflow-migration.test.d.ts +0 -17
- package/dist/workflow/workflow-migration.test.d.ts.map +0 -1
- package/dist/workflow/workflow-migration.test.js +0 -371
- package/dist/workflow/workflow-migration.test.js.map +0 -1
- package/dist/workflow/workflow-permissions.d.ts.map +0 -1
- package/dist/workflow/workflow-permissions.js.map +0 -1
- package/dist/workflow/workflow-permissions.test.d.ts +0 -15
- package/dist/workflow/workflow-permissions.test.d.ts.map +0 -1
- package/dist/workflow/workflow-permissions.test.js +0 -301
- package/dist/workflow/workflow-permissions.test.js.map +0 -1
- package/dist/workflow/workflow-router.d.ts.map +0 -1
- package/dist/workflow/workflow-router.js.map +0 -1
- package/dist/workflow/workflow-router.test.d.ts +0 -20
- package/dist/workflow/workflow-router.test.d.ts.map +0 -1
- package/dist/workflow/workflow-router.test.js +0 -607
- package/dist/workflow/workflow-router.test.js.map +0 -1
- package/dist/workflow/workflow-schema.d.ts.map +0 -1
- package/dist/workflow/workflow-schema.js.map +0 -1
- package/dist/workflow/workflow-schema.test.d.ts +0 -45
- package/dist/workflow/workflow-schema.test.d.ts.map +0 -1
- package/dist/workflow/workflow-schema.test.js +0 -512
- package/dist/workflow/workflow-schema.test.js.map +0 -1
- package/dist/workflow/workflow-stepped-schema.test.d.ts +0 -18
- package/dist/workflow/workflow-stepped-schema.test.d.ts.map +0 -1
- package/dist/workflow/workflow-stepped-schema.test.js +0 -608
- package/dist/workflow/workflow-stepped-schema.test.js.map +0 -1
|
@@ -1,670 +0,0 @@
|
|
|
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
|
-
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
10
|
-
import { parse, stringify } from 'yaml';
|
|
11
|
-
/**
|
|
12
|
-
* Add or update jira_sprint_id field in sprint YAML
|
|
13
|
-
*/
|
|
14
|
-
export async function addJiraSprintIdToYaml(options) {
|
|
15
|
-
const { sprintPath, jiraSprintId, force = true } = options;
|
|
16
|
-
// Check if file exists
|
|
17
|
-
if (!existsSync(sprintPath)) {
|
|
18
|
-
return {
|
|
19
|
-
success: false,
|
|
20
|
-
error: `Sprint file not found: ${sprintPath}`
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
25
|
-
const yaml = parse(content);
|
|
26
|
-
// Check for existing jira_sprint_id
|
|
27
|
-
if (yaml.sprint?.jira_sprint_id !== undefined && !force) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: `Sprint already has jira_sprint_id: ${yaml.sprint.jira_sprint_id}`,
|
|
31
|
-
previousId: yaml.sprint.jira_sprint_id
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
const previousId = yaml.sprint?.jira_sprint_id;
|
|
35
|
-
// Update the YAML
|
|
36
|
-
if (yaml.sprint) {
|
|
37
|
-
yaml.sprint.jira_sprint_id = jiraSprintId;
|
|
38
|
-
}
|
|
39
|
-
// Write back, preserving order by inserting after 'number'
|
|
40
|
-
const updatedContent = stringify(yaml, {
|
|
41
|
-
lineWidth: 0,
|
|
42
|
-
singleQuote: false
|
|
43
|
-
});
|
|
44
|
-
writeFileSync(sprintPath, updatedContent);
|
|
45
|
-
return {
|
|
46
|
-
success: true,
|
|
47
|
-
previousId
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
return {
|
|
52
|
-
success: false,
|
|
53
|
-
error: `Failed to update sprint YAML: ${err.message}`
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Get sprint details from Jira
|
|
59
|
-
*/
|
|
60
|
-
export async function getJiraSprintInfo(options) {
|
|
61
|
-
const { sprintId, _mockResponse, _mockError } = options;
|
|
62
|
-
// Handle mock error
|
|
63
|
-
if (_mockError) {
|
|
64
|
-
return {
|
|
65
|
-
success: false,
|
|
66
|
-
error: _mockError
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
// Handle mock response
|
|
70
|
-
if (_mockResponse !== undefined) {
|
|
71
|
-
if (_mockResponse === null) {
|
|
72
|
-
return {
|
|
73
|
-
success: false,
|
|
74
|
-
error: `Sprint ${sprintId} not found`
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
success: true,
|
|
79
|
-
sprint: _mockResponse
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
// Real implementation would call Jira CLI
|
|
83
|
-
// jira sprint view {sprintId}
|
|
84
|
-
return {
|
|
85
|
-
success: false,
|
|
86
|
-
error: 'Real Jira API not yet implemented - use _mockResponse for testing'
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Get all issues in a Jira sprint
|
|
91
|
-
*/
|
|
92
|
-
export async function getSprintIssues(options) {
|
|
93
|
-
const { _mockResponse, _mockError } = options;
|
|
94
|
-
// Handle mock error
|
|
95
|
-
if (_mockError) {
|
|
96
|
-
return {
|
|
97
|
-
success: false,
|
|
98
|
-
error: _mockError
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
// Handle mock response
|
|
102
|
-
if (_mockResponse !== undefined) {
|
|
103
|
-
return {
|
|
104
|
-
success: true,
|
|
105
|
-
issues: _mockResponse
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
// Real implementation would call Jira CLI
|
|
109
|
-
// jira issue list --jql "sprint = {sprintId}"
|
|
110
|
-
return {
|
|
111
|
-
success: false,
|
|
112
|
-
error: 'Real Jira API not yet implemented - use _mockResponse for testing'
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Check if a specific story is in a Jira sprint
|
|
117
|
-
*/
|
|
118
|
-
export async function isStoryInJiraSprint(options) {
|
|
119
|
-
const { _mockResponse, _mockError } = options;
|
|
120
|
-
// Handle mock error
|
|
121
|
-
if (_mockError) {
|
|
122
|
-
return {
|
|
123
|
-
success: false,
|
|
124
|
-
error: _mockError
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
// Handle mock response
|
|
128
|
-
if (_mockResponse !== undefined) {
|
|
129
|
-
return {
|
|
130
|
-
success: true,
|
|
131
|
-
inSprint: _mockResponse
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
// Real implementation would call Jira CLI
|
|
135
|
-
// jira issue view {jiraKey} and check sprint field
|
|
136
|
-
return {
|
|
137
|
-
success: false,
|
|
138
|
-
error: 'Real Jira API not yet implemented - use _mockResponse for testing'
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get velocity metrics from Jira sprint
|
|
143
|
-
*/
|
|
144
|
-
export async function getSprintVelocityFromJira(options) {
|
|
145
|
-
const { _mockResponse, _mockError } = options;
|
|
146
|
-
// Handle mock error
|
|
147
|
-
if (_mockError) {
|
|
148
|
-
return {
|
|
149
|
-
success: false,
|
|
150
|
-
error: _mockError
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
// Handle mock response
|
|
154
|
-
if (_mockResponse !== undefined) {
|
|
155
|
-
// Calculate velocity percentage if not provided
|
|
156
|
-
const metrics = { ..._mockResponse };
|
|
157
|
-
if (metrics.velocityPercentage === undefined) {
|
|
158
|
-
if (metrics.totalPoints === 0) {
|
|
159
|
-
metrics.velocityPercentage = 0;
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
metrics.velocityPercentage = Math.round((metrics.completedPoints / metrics.totalPoints) * 100);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
success: true,
|
|
167
|
-
metrics
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
// Real implementation would call Jira CLI
|
|
171
|
-
// jira issue list --jql "sprint = {sprintId}" and aggregate points
|
|
172
|
-
return {
|
|
173
|
-
success: false,
|
|
174
|
-
error: 'Real Jira API not yet implemented - use _mockResponse for testing'
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Validate that local sprint name matches Jira sprint name
|
|
179
|
-
*/
|
|
180
|
-
export async function validateSprintAlignment(options) {
|
|
181
|
-
const { sprintPath, _mockJiraSprint, _mockError } = options;
|
|
182
|
-
// Handle mock error
|
|
183
|
-
if (_mockError) {
|
|
184
|
-
return {
|
|
185
|
-
success: false,
|
|
186
|
-
error: _mockError
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
// Read local sprint YAML
|
|
190
|
-
if (!existsSync(sprintPath)) {
|
|
191
|
-
return {
|
|
192
|
-
success: false,
|
|
193
|
-
error: `Sprint file not found: ${sprintPath}`
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
try {
|
|
197
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
198
|
-
const yaml = parse(content);
|
|
199
|
-
const localSprintName = yaml.sprint?.jira_sprint_name || yaml.sprint?.name;
|
|
200
|
-
const jiraSprintId = yaml.sprint?.jira_sprint_id;
|
|
201
|
-
const localStatus = yaml.sprint?.status;
|
|
202
|
-
// Check if jira_sprint_id is configured
|
|
203
|
-
if (jiraSprintId === undefined) {
|
|
204
|
-
return {
|
|
205
|
-
success: false,
|
|
206
|
-
error: 'Sprint jira_sprint_id not configured',
|
|
207
|
-
localSprintName
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
// Get Jira sprint info (mock or real)
|
|
211
|
-
let jiraSprint = null;
|
|
212
|
-
if (_mockJiraSprint !== undefined) {
|
|
213
|
-
jiraSprint = _mockJiraSprint;
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
// Would call real API
|
|
217
|
-
return {
|
|
218
|
-
success: false,
|
|
219
|
-
error: 'Real Jira API not yet implemented - use _mockJiraSprint for testing'
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
if (!jiraSprint) {
|
|
223
|
-
return {
|
|
224
|
-
success: false,
|
|
225
|
-
error: `Jira sprint ${jiraSprintId} not found`,
|
|
226
|
-
localSprintName,
|
|
227
|
-
jiraSprintId
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
// Check for state mismatch (local active but Jira closed)
|
|
231
|
-
if (localStatus === 'active' && jiraSprint.state === 'closed') {
|
|
232
|
-
return {
|
|
233
|
-
success: true,
|
|
234
|
-
aligned: false,
|
|
235
|
-
localSprintName,
|
|
236
|
-
jiraSprintId,
|
|
237
|
-
jiraSprintName: jiraSprint.name,
|
|
238
|
-
warning: `Sprint mismatch: local is active but Jira sprint is closed`
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
// Check for name mismatch
|
|
242
|
-
if (localSprintName && jiraSprint.name !== localSprintName) {
|
|
243
|
-
return {
|
|
244
|
-
success: true,
|
|
245
|
-
aligned: false,
|
|
246
|
-
localSprintName,
|
|
247
|
-
jiraSprintId,
|
|
248
|
-
jiraSprintName: jiraSprint.name,
|
|
249
|
-
warning: `Sprint name mismatch: local is "${localSprintName}", Jira is "${jiraSprint.name}"`
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
// All checks passed - aligned
|
|
253
|
-
return {
|
|
254
|
-
success: true,
|
|
255
|
-
aligned: true,
|
|
256
|
-
localSprintName,
|
|
257
|
-
jiraSprintId,
|
|
258
|
-
jiraSprintName: jiraSprint.name
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
catch (err) {
|
|
262
|
-
return {
|
|
263
|
-
success: false,
|
|
264
|
-
error: `Failed to read sprint YAML: ${err.message}`
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
// ============================================
|
|
269
|
-
// AC1 + AC2: Extract story IDs from sprint YAML
|
|
270
|
-
// ============================================
|
|
271
|
-
/**
|
|
272
|
-
* Extract all story IDs from sprint YAML file
|
|
273
|
-
*/
|
|
274
|
-
export async function getYamlStoryIds(options) {
|
|
275
|
-
const { sprintPath } = options;
|
|
276
|
-
if (!existsSync(sprintPath)) {
|
|
277
|
-
return {
|
|
278
|
-
success: false,
|
|
279
|
-
error: `Sprint file not found: ${sprintPath}`
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
try {
|
|
283
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
284
|
-
const yaml = parse(content);
|
|
285
|
-
const storyIds = [];
|
|
286
|
-
if (yaml.epics) {
|
|
287
|
-
for (const epic of yaml.epics) {
|
|
288
|
-
if (epic.stories) {
|
|
289
|
-
for (const story of epic.stories) {
|
|
290
|
-
if (story.id) {
|
|
291
|
-
storyIds.push(String(story.id));
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return {
|
|
298
|
-
success: true,
|
|
299
|
-
storyIds
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
catch (err) {
|
|
303
|
-
return {
|
|
304
|
-
success: false,
|
|
305
|
-
error: `Failed to parse sprint YAML: ${err.message}`
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
// ============================================
|
|
310
|
-
// AC2: Compare Jira issues with YAML stories
|
|
311
|
-
// ============================================
|
|
312
|
-
/**
|
|
313
|
-
* Extract story ID from Jira summary
|
|
314
|
-
* Handles formats like "47-1: Title", "Story 47-1: Title", etc.
|
|
315
|
-
*/
|
|
316
|
-
function extractStoryIdFromSummary(summary) {
|
|
317
|
-
// Match patterns like "47-1:", "Story 47-1:", "31-5:" etc.
|
|
318
|
-
const match = summary.match(/(?:Story\s+)?(\d+-\d+):/i);
|
|
319
|
-
return match ? match[1] : null;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Find stories that are in Jira but not in the sprint YAML
|
|
323
|
-
*/
|
|
324
|
-
export async function findJiraOnlyStories(options) {
|
|
325
|
-
const { jiraIssues, yamlStoryIds, filterLabel } = options;
|
|
326
|
-
const missingStories = [];
|
|
327
|
-
for (const issue of jiraIssues) {
|
|
328
|
-
// Filter by label if provided
|
|
329
|
-
if (filterLabel && (!issue.labels || !issue.labels.includes(filterLabel))) {
|
|
330
|
-
continue;
|
|
331
|
-
}
|
|
332
|
-
// Extract story ID from summary
|
|
333
|
-
const storyId = extractStoryIdFromSummary(issue.summary);
|
|
334
|
-
if (!storyId) {
|
|
335
|
-
continue;
|
|
336
|
-
}
|
|
337
|
-
// Check if this story is missing from YAML
|
|
338
|
-
if (!yamlStoryIds.includes(storyId)) {
|
|
339
|
-
missingStories.push({
|
|
340
|
-
...issue,
|
|
341
|
-
storyId
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return {
|
|
346
|
-
success: true,
|
|
347
|
-
missingStories
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
// ============================================
|
|
351
|
-
// AC3: Format report of missing stories
|
|
352
|
-
// ============================================
|
|
353
|
-
/**
|
|
354
|
-
* Generate a human-readable report of missing stories
|
|
355
|
-
*/
|
|
356
|
-
export async function formatMissingStoriesReport(options) {
|
|
357
|
-
const { missingStories, jiraBaseUrl } = options;
|
|
358
|
-
if (missingStories.length === 0) {
|
|
359
|
-
return {
|
|
360
|
-
success: true,
|
|
361
|
-
report: '✓ All synced - 0 stories missing from sprint YAML'
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
const lines = [];
|
|
365
|
-
lines.push(`Found ${missingStories.length} stories in Jira but not in sprint YAML:\n`);
|
|
366
|
-
for (const story of missingStories) {
|
|
367
|
-
const title = story.summary.replace(/^\d+-\d+:\s*/, '').replace(/^Story\s+\d+-\d+:\s*/i, '');
|
|
368
|
-
let line = ` - ${story.storyId}: ${title}`;
|
|
369
|
-
line += ` [${story.key}]`;
|
|
370
|
-
line += ` (${story.status})`;
|
|
371
|
-
if (jiraBaseUrl) {
|
|
372
|
-
line += `\n ${jiraBaseUrl}/browse/${story.key}`;
|
|
373
|
-
}
|
|
374
|
-
lines.push(line);
|
|
375
|
-
}
|
|
376
|
-
return {
|
|
377
|
-
success: true,
|
|
378
|
-
report: lines.join('\n')
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
// ============================================
|
|
382
|
-
// AC4: Import missing stories to YAML
|
|
383
|
-
// ============================================
|
|
384
|
-
/**
|
|
385
|
-
* Map Jira status to YAML status
|
|
386
|
-
*/
|
|
387
|
-
function mapJiraStatusToYaml(jiraStatus) {
|
|
388
|
-
const normalized = jiraStatus.toLowerCase();
|
|
389
|
-
if (normalized === 'done') {
|
|
390
|
-
return 'done';
|
|
391
|
-
}
|
|
392
|
-
if (normalized === 'in progress') {
|
|
393
|
-
return 'in_progress';
|
|
394
|
-
}
|
|
395
|
-
// To Do, Open, Backlog, etc. → backlog
|
|
396
|
-
return 'backlog';
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Import missing stories from Jira into sprint YAML
|
|
400
|
-
*/
|
|
401
|
-
export async function importMissingStoriesToYaml(options) {
|
|
402
|
-
const { sprintPath, missingStories, targetEpicId, dryRun = false } = options;
|
|
403
|
-
if (!existsSync(sprintPath)) {
|
|
404
|
-
return {
|
|
405
|
-
success: false,
|
|
406
|
-
error: `Sprint file not found: ${sprintPath}`
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
try {
|
|
410
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
411
|
-
const yaml = parse(content);
|
|
412
|
-
// Find target epic
|
|
413
|
-
const targetEpic = yaml.epics?.find(e => e.id === targetEpicId);
|
|
414
|
-
if (!targetEpic) {
|
|
415
|
-
return {
|
|
416
|
-
success: false,
|
|
417
|
-
error: `Target epic '${targetEpicId}' not found in sprint YAML`
|
|
418
|
-
};
|
|
419
|
-
}
|
|
420
|
-
// Dry run: just return what would be imported
|
|
421
|
-
if (dryRun) {
|
|
422
|
-
return {
|
|
423
|
-
success: true,
|
|
424
|
-
importedCount: missingStories.length,
|
|
425
|
-
wouldImport: missingStories
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
// Ensure stories array exists
|
|
429
|
-
if (!targetEpic.stories) {
|
|
430
|
-
targetEpic.stories = [];
|
|
431
|
-
}
|
|
432
|
-
// Add missing stories
|
|
433
|
-
for (const story of missingStories) {
|
|
434
|
-
const title = story.summary.replace(/^\d+-\d+:\s*/, '').replace(/^Story\s+\d+-\d+:\s*/i, '');
|
|
435
|
-
targetEpic.stories.push({
|
|
436
|
-
id: story.storyId,
|
|
437
|
-
title,
|
|
438
|
-
status: mapJiraStatusToYaml(story.status),
|
|
439
|
-
jira: story.key,
|
|
440
|
-
...(story.points !== undefined && { points: story.points })
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
// Write back
|
|
444
|
-
const updatedContent = stringify(yaml, {
|
|
445
|
-
lineWidth: 0,
|
|
446
|
-
singleQuote: false
|
|
447
|
-
});
|
|
448
|
-
writeFileSync(sprintPath, updatedContent);
|
|
449
|
-
return {
|
|
450
|
-
success: true,
|
|
451
|
-
importedCount: missingStories.length
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
catch (err) {
|
|
455
|
-
return {
|
|
456
|
-
success: false,
|
|
457
|
-
error: `Failed to update sprint YAML: ${err.message}`
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Sync story sprint membership between YAML and Jira
|
|
463
|
-
*
|
|
464
|
-
* Direction: Jira → YAML
|
|
465
|
-
* - Stories in Jira sprint get in_sprint: true
|
|
466
|
-
* - Stories not in Jira sprint get in_sprint: false
|
|
467
|
-
*/
|
|
468
|
-
export async function syncStorySprintMembershipFromJira(options) {
|
|
469
|
-
const { sprintPath, jiraSprintId: _jiraSprintId, _mockJiraIssues, _mockError } = options;
|
|
470
|
-
if (_mockError) {
|
|
471
|
-
return { success: false, error: _mockError };
|
|
472
|
-
}
|
|
473
|
-
if (!existsSync(sprintPath)) {
|
|
474
|
-
return { success: false, error: `Sprint file not found: ${sprintPath}` };
|
|
475
|
-
}
|
|
476
|
-
try {
|
|
477
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
478
|
-
const yaml = parse(content);
|
|
479
|
-
// Get issues in Jira sprint
|
|
480
|
-
let jiraIssueKeys;
|
|
481
|
-
if (_mockJiraIssues !== undefined) {
|
|
482
|
-
jiraIssueKeys = new Set(_mockJiraIssues.map(i => i.key));
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
// Real implementation would call: jira sprint list {sprintId} --plain
|
|
486
|
-
return {
|
|
487
|
-
success: false,
|
|
488
|
-
error: 'Real Jira API not yet implemented - use _mockJiraIssues for testing'
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
const added = [];
|
|
492
|
-
const removed = [];
|
|
493
|
-
let unchanged = 0;
|
|
494
|
-
// Update in_sprint for each story
|
|
495
|
-
if (yaml.epics) {
|
|
496
|
-
for (const epic of yaml.epics) {
|
|
497
|
-
if (epic.stories) {
|
|
498
|
-
for (const story of epic.stories) {
|
|
499
|
-
const jiraKey = story.jira || story.id;
|
|
500
|
-
const inJiraSprint = jiraIssueKeys.has(jiraKey);
|
|
501
|
-
const wasInSprint = story.in_sprint === true;
|
|
502
|
-
if (inJiraSprint && !wasInSprint) {
|
|
503
|
-
story.in_sprint = true;
|
|
504
|
-
added.push(jiraKey);
|
|
505
|
-
}
|
|
506
|
-
else if (!inJiraSprint && wasInSprint) {
|
|
507
|
-
story.in_sprint = false;
|
|
508
|
-
removed.push(jiraKey);
|
|
509
|
-
}
|
|
510
|
-
else {
|
|
511
|
-
unchanged++;
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
// Write back if changes were made
|
|
518
|
-
if (added.length > 0 || removed.length > 0) {
|
|
519
|
-
const updatedContent = stringify(yaml, {
|
|
520
|
-
lineWidth: 0,
|
|
521
|
-
singleQuote: false
|
|
522
|
-
});
|
|
523
|
-
writeFileSync(sprintPath, updatedContent);
|
|
524
|
-
}
|
|
525
|
-
return {
|
|
526
|
-
success: true,
|
|
527
|
-
updated: added.length + removed.length,
|
|
528
|
-
added,
|
|
529
|
-
removed,
|
|
530
|
-
unchanged
|
|
531
|
-
};
|
|
532
|
-
}
|
|
533
|
-
catch (err) {
|
|
534
|
-
return {
|
|
535
|
-
success: false,
|
|
536
|
-
error: `Failed to sync sprint membership: ${err.message}`
|
|
537
|
-
};
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* Add a story to a Jira sprint
|
|
542
|
-
*
|
|
543
|
-
* Direction: YAML → Jira
|
|
544
|
-
* Uses: jira sprint add {sprintId} {jiraKey}
|
|
545
|
-
*/
|
|
546
|
-
export async function addStoryToJiraSprint(options) {
|
|
547
|
-
const { jiraKey: _jiraKey, sprintId: _sprintId, _mockSuccess, _mockError } = options;
|
|
548
|
-
if (_mockError) {
|
|
549
|
-
return { success: false, error: _mockError };
|
|
550
|
-
}
|
|
551
|
-
if (_mockSuccess !== undefined) {
|
|
552
|
-
return { success: _mockSuccess, added: _mockSuccess };
|
|
553
|
-
}
|
|
554
|
-
// Real implementation would call: jira sprint add {sprintId} {jiraKey}
|
|
555
|
-
return {
|
|
556
|
-
success: false,
|
|
557
|
-
error: 'Real Jira API not yet implemented - use _mockSuccess for testing'
|
|
558
|
-
};
|
|
559
|
-
}
|
|
560
|
-
/**
|
|
561
|
-
* Remove a story from its current Jira sprint (move to backlog)
|
|
562
|
-
*
|
|
563
|
-
* Direction: YAML → Jira
|
|
564
|
-
* Uses: jira issue edit {jiraKey} --sprint "" or move to backlog
|
|
565
|
-
*/
|
|
566
|
-
export async function removeStoryFromJiraSprint(options) {
|
|
567
|
-
const { jiraKey: _jiraKey, _mockSuccess, _mockError } = options;
|
|
568
|
-
if (_mockError) {
|
|
569
|
-
return { success: false, error: _mockError };
|
|
570
|
-
}
|
|
571
|
-
if (_mockSuccess !== undefined) {
|
|
572
|
-
return { success: _mockSuccess, removed: _mockSuccess };
|
|
573
|
-
}
|
|
574
|
-
// Real implementation would move story to backlog
|
|
575
|
-
return {
|
|
576
|
-
success: false,
|
|
577
|
-
error: 'Real Jira API not yet implemented - use _mockSuccess for testing'
|
|
578
|
-
};
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Sync story sprint membership from YAML to Jira
|
|
582
|
-
*
|
|
583
|
-
* Direction: YAML → Jira
|
|
584
|
-
* - Stories with in_sprint: true are added to Jira sprint
|
|
585
|
-
* - Stories with in_sprint: false are removed from Jira sprint
|
|
586
|
-
*/
|
|
587
|
-
export async function syncStorySprintMembershipToJira(options) {
|
|
588
|
-
const { sprintPath, jiraSprintId, dryRun = false, _mockAddSuccess, _mockRemoveSuccess, _mockError } = options;
|
|
589
|
-
if (_mockError) {
|
|
590
|
-
return { success: false, error: _mockError };
|
|
591
|
-
}
|
|
592
|
-
if (!existsSync(sprintPath)) {
|
|
593
|
-
return { success: false, error: `Sprint file not found: ${sprintPath}` };
|
|
594
|
-
}
|
|
595
|
-
try {
|
|
596
|
-
const content = readFileSync(sprintPath, 'utf-8');
|
|
597
|
-
const yaml = parse(content);
|
|
598
|
-
const toAdd = [];
|
|
599
|
-
const toRemove = [];
|
|
600
|
-
// Collect stories that need sprint membership changes
|
|
601
|
-
if (yaml.epics) {
|
|
602
|
-
for (const epic of yaml.epics) {
|
|
603
|
-
if (epic.stories) {
|
|
604
|
-
for (const story of epic.stories) {
|
|
605
|
-
const jiraKey = story.jira || story.id;
|
|
606
|
-
// Only process stories with explicit in_sprint field
|
|
607
|
-
if (story.in_sprint === true) {
|
|
608
|
-
toAdd.push(jiraKey);
|
|
609
|
-
}
|
|
610
|
-
else if (story.in_sprint === false) {
|
|
611
|
-
toRemove.push(jiraKey);
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
// Dry run: just return what would be done
|
|
618
|
-
if (dryRun) {
|
|
619
|
-
return {
|
|
620
|
-
success: true,
|
|
621
|
-
toAdd,
|
|
622
|
-
toRemove
|
|
623
|
-
};
|
|
624
|
-
}
|
|
625
|
-
// Execute changes
|
|
626
|
-
const added = [];
|
|
627
|
-
const removed = [];
|
|
628
|
-
const failed = [];
|
|
629
|
-
for (const jiraKey of toAdd) {
|
|
630
|
-
const result = await addStoryToJiraSprint({
|
|
631
|
-
jiraKey,
|
|
632
|
-
sprintId: jiraSprintId,
|
|
633
|
-
_mockSuccess: _mockAddSuccess
|
|
634
|
-
});
|
|
635
|
-
if (result.success) {
|
|
636
|
-
added.push(jiraKey);
|
|
637
|
-
}
|
|
638
|
-
else {
|
|
639
|
-
failed.push(jiraKey);
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
for (const jiraKey of toRemove) {
|
|
643
|
-
const result = await removeStoryFromJiraSprint({
|
|
644
|
-
jiraKey,
|
|
645
|
-
_mockSuccess: _mockRemoveSuccess
|
|
646
|
-
});
|
|
647
|
-
if (result.success) {
|
|
648
|
-
removed.push(jiraKey);
|
|
649
|
-
}
|
|
650
|
-
else {
|
|
651
|
-
failed.push(jiraKey);
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
return {
|
|
655
|
-
success: failed.length === 0,
|
|
656
|
-
toAdd,
|
|
657
|
-
toRemove,
|
|
658
|
-
added,
|
|
659
|
-
removed,
|
|
660
|
-
failed: failed.length > 0 ? failed : undefined
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
catch (err) {
|
|
664
|
-
return {
|
|
665
|
-
success: false,
|
|
666
|
-
error: `Failed to sync sprint membership to Jira: ${err.message}`
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
//# sourceMappingURL=jira-sprint-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jira-sprint-sync.js","sourceRoot":"","sources":["../../src/jira/jira-sprint-sync.ts"],"names":[],"mappings":"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"}
|