@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,449 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BMAD Epics Parser Tests - Story 32-3
|
|
3
|
-
*
|
|
4
|
-
* Tests for parsing BMAD epics.md files into structured format.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it } from 'node:test';
|
|
7
|
-
import assert from 'node:assert/strict';
|
|
8
|
-
import { parseBmadEpics, convertStoryId, isValidStoryId, parseStoryId, } from './epics-parser.js';
|
|
9
|
-
// =============================================================================
|
|
10
|
-
// Story ID Utilities
|
|
11
|
-
// =============================================================================
|
|
12
|
-
describe('Story ID Utilities', () => {
|
|
13
|
-
describe('convertStoryId', () => {
|
|
14
|
-
it('should convert N.M to N-M format', () => {
|
|
15
|
-
assert.equal(convertStoryId('1.1'), '1-1');
|
|
16
|
-
assert.equal(convertStoryId('2.3'), '2-3');
|
|
17
|
-
assert.equal(convertStoryId('10.25'), '10-25');
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
describe('isValidStoryId', () => {
|
|
21
|
-
it('should accept valid N.M format', () => {
|
|
22
|
-
assert.equal(isValidStoryId('1.1'), true);
|
|
23
|
-
assert.equal(isValidStoryId('2.10'), true);
|
|
24
|
-
assert.equal(isValidStoryId('99.99'), true);
|
|
25
|
-
});
|
|
26
|
-
it('should reject invalid formats', () => {
|
|
27
|
-
assert.equal(isValidStoryId('1'), false);
|
|
28
|
-
assert.equal(isValidStoryId('1-1'), false);
|
|
29
|
-
assert.equal(isValidStoryId('a.b'), false);
|
|
30
|
-
assert.equal(isValidStoryId('1.2.3'), false);
|
|
31
|
-
assert.equal(isValidStoryId(''), false);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
describe('parseStoryId', () => {
|
|
35
|
-
it('should extract epic and story numbers', () => {
|
|
36
|
-
const result = parseStoryId('1.3');
|
|
37
|
-
assert.deepEqual(result, { epicNum: 1, storyNum: 3 });
|
|
38
|
-
});
|
|
39
|
-
it('should handle larger numbers', () => {
|
|
40
|
-
const result = parseStoryId('12.45');
|
|
41
|
-
assert.deepEqual(result, { epicNum: 12, storyNum: 45 });
|
|
42
|
-
});
|
|
43
|
-
it('should return null for invalid IDs', () => {
|
|
44
|
-
assert.equal(parseStoryId('invalid'), null);
|
|
45
|
-
assert.equal(parseStoryId('1-2'), null);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
// =============================================================================
|
|
50
|
-
// Main Parser
|
|
51
|
-
// =============================================================================
|
|
52
|
-
describe('parseBmadEpics', () => {
|
|
53
|
-
describe('Empty and Invalid Content', () => {
|
|
54
|
-
it('should reject empty content', () => {
|
|
55
|
-
const result = parseBmadEpics('');
|
|
56
|
-
assert.equal(result.success, false);
|
|
57
|
-
assert.equal(result.errors?.[0].message, 'Content is empty');
|
|
58
|
-
});
|
|
59
|
-
it('should reject whitespace-only content', () => {
|
|
60
|
-
const result = parseBmadEpics(' \n\n ');
|
|
61
|
-
assert.equal(result.success, false);
|
|
62
|
-
assert.equal(result.errors?.[0].message, 'Content is empty');
|
|
63
|
-
});
|
|
64
|
-
it('should reject content with no epics', () => {
|
|
65
|
-
const result = parseBmadEpics('# Some Header\n\nSome content');
|
|
66
|
-
assert.equal(result.success, false);
|
|
67
|
-
assert.equal(result.errors?.[0].message, 'No epics found. Expected "## Epic N:" headers.');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('Single Epic Parsing', () => {
|
|
71
|
-
it('should parse a single epic with one story', () => {
|
|
72
|
-
const content = `# Project Epics
|
|
73
|
-
|
|
74
|
-
## Epic 1: User Authentication
|
|
75
|
-
|
|
76
|
-
Enable secure user authentication.
|
|
77
|
-
|
|
78
|
-
### Story 1.1: Email Login
|
|
79
|
-
**Points:** 5
|
|
80
|
-
**Priority:** P0
|
|
81
|
-
|
|
82
|
-
#### Description
|
|
83
|
-
As a user, I want to log in with email.
|
|
84
|
-
|
|
85
|
-
#### Acceptance Criteria
|
|
86
|
-
- Given I am on login, When I enter valid credentials, Then I am logged in
|
|
87
|
-
`;
|
|
88
|
-
const result = parseBmadEpics(content);
|
|
89
|
-
assert.equal(result.success, true);
|
|
90
|
-
assert.equal(result.epics?.epics.length, 1);
|
|
91
|
-
const epic = result.epics?.epics[0];
|
|
92
|
-
assert.equal(epic?.id, 1);
|
|
93
|
-
assert.equal(epic?.title, 'User Authentication');
|
|
94
|
-
assert.equal(epic?.description, 'Enable secure user authentication.');
|
|
95
|
-
assert.equal(epic?.stories.length, 1);
|
|
96
|
-
const story = epic?.stories[0];
|
|
97
|
-
assert.equal(story?.id, '1-1');
|
|
98
|
-
assert.equal(story?.bmadId, '1.1');
|
|
99
|
-
assert.equal(story?.title, 'Email Login');
|
|
100
|
-
assert.equal(story?.points, 5);
|
|
101
|
-
assert.equal(story?.priority, 'P0');
|
|
102
|
-
});
|
|
103
|
-
it('should parse multiple stories in one epic', () => {
|
|
104
|
-
const content = `## Epic 1: Auth
|
|
105
|
-
|
|
106
|
-
Authentication features.
|
|
107
|
-
|
|
108
|
-
### Story 1.1: Login
|
|
109
|
-
**Points:** 3
|
|
110
|
-
**Priority:** P0
|
|
111
|
-
|
|
112
|
-
#### Description
|
|
113
|
-
Login feature.
|
|
114
|
-
|
|
115
|
-
#### Acceptance Criteria
|
|
116
|
-
- Given valid credentials, When submitted, Then logged in
|
|
117
|
-
|
|
118
|
-
### Story 1.2: Logout
|
|
119
|
-
**Points:** 2
|
|
120
|
-
**Priority:** P1
|
|
121
|
-
|
|
122
|
-
#### Description
|
|
123
|
-
Logout feature.
|
|
124
|
-
|
|
125
|
-
#### Acceptance Criteria
|
|
126
|
-
- Given logged in, When logout clicked, Then session ended
|
|
127
|
-
`;
|
|
128
|
-
const result = parseBmadEpics(content);
|
|
129
|
-
assert.equal(result.success, true);
|
|
130
|
-
assert.equal(result.epics?.epics[0].stories.length, 2);
|
|
131
|
-
assert.equal(result.epics?.epics[0].stories[0].id, '1-1');
|
|
132
|
-
assert.equal(result.epics?.epics[0].stories[1].id, '1-2');
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('Multiple Epics', () => {
|
|
136
|
-
it('should parse multiple epics', () => {
|
|
137
|
-
const content = `# Project Epics
|
|
138
|
-
|
|
139
|
-
## Epic 1: Authentication
|
|
140
|
-
|
|
141
|
-
Auth epic description.
|
|
142
|
-
|
|
143
|
-
### Story 1.1: Login
|
|
144
|
-
**Points:** 5
|
|
145
|
-
**Priority:** P0
|
|
146
|
-
|
|
147
|
-
#### Description
|
|
148
|
-
Login story.
|
|
149
|
-
|
|
150
|
-
#### Acceptance Criteria
|
|
151
|
-
- Given creds, When submit, Then logged in
|
|
152
|
-
|
|
153
|
-
## Epic 2: Profile Management
|
|
154
|
-
|
|
155
|
-
Profile epic description.
|
|
156
|
-
|
|
157
|
-
### Story 2.1: Edit Profile
|
|
158
|
-
**Points:** 3
|
|
159
|
-
**Priority:** P1
|
|
160
|
-
|
|
161
|
-
#### Description
|
|
162
|
-
Edit profile story.
|
|
163
|
-
|
|
164
|
-
#### Acceptance Criteria
|
|
165
|
-
- Given profile page, When edit name, Then name updated
|
|
166
|
-
`;
|
|
167
|
-
const result = parseBmadEpics(content);
|
|
168
|
-
assert.equal(result.success, true);
|
|
169
|
-
assert.equal(result.epics?.epics.length, 2);
|
|
170
|
-
assert.equal(result.epics?.epics[0].id, 1);
|
|
171
|
-
assert.equal(result.epics?.epics[0].title, 'Authentication');
|
|
172
|
-
assert.equal(result.epics?.epics[1].id, 2);
|
|
173
|
-
assert.equal(result.epics?.epics[1].title, 'Profile Management');
|
|
174
|
-
assert.equal(result.epics?.epics[1].stories[0].id, '2-1');
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe('Acceptance Criteria Parsing', () => {
|
|
178
|
-
it('should parse BDD format acceptance criteria', () => {
|
|
179
|
-
const content = `## Epic 1: Test
|
|
180
|
-
|
|
181
|
-
Test epic.
|
|
182
|
-
|
|
183
|
-
### Story 1.1: Test Story
|
|
184
|
-
**Points:** 1
|
|
185
|
-
**Priority:** P0
|
|
186
|
-
|
|
187
|
-
#### Description
|
|
188
|
-
Test.
|
|
189
|
-
|
|
190
|
-
#### Acceptance Criteria
|
|
191
|
-
- Given I am logged in, When I click logout, Then I am logged out
|
|
192
|
-
- Given invalid password, When I submit, Then I see error message
|
|
193
|
-
`;
|
|
194
|
-
const result = parseBmadEpics(content);
|
|
195
|
-
assert.equal(result.success, true);
|
|
196
|
-
const acs = result.epics?.epics[0].stories[0].acceptanceCriteria;
|
|
197
|
-
assert.equal(acs?.length, 2);
|
|
198
|
-
assert.equal(acs?.[0].given, 'I am logged in');
|
|
199
|
-
assert.equal(acs?.[0].when, 'I click logout');
|
|
200
|
-
assert.equal(acs?.[0].then, 'I am logged out');
|
|
201
|
-
assert.equal(acs?.[1].given, 'invalid password');
|
|
202
|
-
assert.equal(acs?.[1].when, 'I submit');
|
|
203
|
-
assert.equal(acs?.[1].then, 'I see error message');
|
|
204
|
-
});
|
|
205
|
-
it('should handle non-BDD acceptance criteria', () => {
|
|
206
|
-
const content = `## Epic 1: Test
|
|
207
|
-
|
|
208
|
-
Test.
|
|
209
|
-
|
|
210
|
-
### Story 1.1: Test
|
|
211
|
-
**Points:** 1
|
|
212
|
-
**Priority:** P0
|
|
213
|
-
|
|
214
|
-
#### Description
|
|
215
|
-
Test.
|
|
216
|
-
|
|
217
|
-
#### Acceptance Criteria
|
|
218
|
-
- Users can upload images
|
|
219
|
-
- Maximum file size is 5MB
|
|
220
|
-
`;
|
|
221
|
-
const result = parseBmadEpics(content);
|
|
222
|
-
assert.equal(result.success, true);
|
|
223
|
-
const acs = result.epics?.epics[0].stories[0].acceptanceCriteria;
|
|
224
|
-
assert.equal(acs?.length, 2);
|
|
225
|
-
assert.equal(acs?.[0].raw, 'Users can upload images');
|
|
226
|
-
assert.equal(acs?.[0].given, '');
|
|
227
|
-
assert.equal(acs?.[1].raw, 'Maximum file size is 5MB');
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe('Requirements Coverage', () => {
|
|
231
|
-
it('should parse requirements coverage section', () => {
|
|
232
|
-
const content = `## Epic 1: Test
|
|
233
|
-
|
|
234
|
-
Test.
|
|
235
|
-
|
|
236
|
-
### Story 1.1: Test
|
|
237
|
-
**Points:** 3
|
|
238
|
-
**Priority:** P0
|
|
239
|
-
|
|
240
|
-
#### Description
|
|
241
|
-
Test.
|
|
242
|
-
|
|
243
|
-
#### Acceptance Criteria
|
|
244
|
-
- Given test, When test, Then test
|
|
245
|
-
|
|
246
|
-
#### Requirements Coverage
|
|
247
|
-
- REQ-AUTH-001: Users must authenticate before accessing protected resources
|
|
248
|
-
- REQ-SEC-002: Passwords must be hashed with bcrypt
|
|
249
|
-
`;
|
|
250
|
-
const result = parseBmadEpics(content);
|
|
251
|
-
assert.equal(result.success, true);
|
|
252
|
-
const reqs = result.epics?.epics[0].stories[0].requirements;
|
|
253
|
-
assert.equal(reqs?.length, 2);
|
|
254
|
-
assert.equal(reqs?.[0].id, 'REQ-AUTH-001');
|
|
255
|
-
assert.equal(reqs?.[0].description, 'Users must authenticate before accessing protected resources');
|
|
256
|
-
assert.equal(reqs?.[1].id, 'REQ-SEC-002');
|
|
257
|
-
});
|
|
258
|
-
it('should handle missing requirements section', () => {
|
|
259
|
-
const content = `## Epic 1: Test
|
|
260
|
-
|
|
261
|
-
Test.
|
|
262
|
-
|
|
263
|
-
### Story 1.1: Test
|
|
264
|
-
**Points:** 1
|
|
265
|
-
**Priority:** P0
|
|
266
|
-
|
|
267
|
-
#### Description
|
|
268
|
-
Test.
|
|
269
|
-
|
|
270
|
-
#### Acceptance Criteria
|
|
271
|
-
- Given test, When test, Then test
|
|
272
|
-
`;
|
|
273
|
-
const result = parseBmadEpics(content);
|
|
274
|
-
assert.equal(result.success, true);
|
|
275
|
-
assert.equal(result.epics?.epics[0].stories[0].requirements.length, 0);
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
describe('Error Handling', () => {
|
|
279
|
-
it('should report missing Points field', () => {
|
|
280
|
-
const content = `## Epic 1: Test
|
|
281
|
-
|
|
282
|
-
Test.
|
|
283
|
-
|
|
284
|
-
### Story 1.1: Test
|
|
285
|
-
**Priority:** P0
|
|
286
|
-
|
|
287
|
-
#### Description
|
|
288
|
-
Test.
|
|
289
|
-
|
|
290
|
-
#### Acceptance Criteria
|
|
291
|
-
- Given test, When test, Then test
|
|
292
|
-
`;
|
|
293
|
-
const result = parseBmadEpics(content);
|
|
294
|
-
assert.equal(result.success, false);
|
|
295
|
-
assert.ok(result.errors?.some(e => e.message.includes('Missing **Points:**')));
|
|
296
|
-
});
|
|
297
|
-
it('should report missing Priority field', () => {
|
|
298
|
-
const content = `## Epic 1: Test
|
|
299
|
-
|
|
300
|
-
Test.
|
|
301
|
-
|
|
302
|
-
### Story 1.1: Test
|
|
303
|
-
**Points:** 5
|
|
304
|
-
|
|
305
|
-
#### Description
|
|
306
|
-
Test.
|
|
307
|
-
|
|
308
|
-
#### Acceptance Criteria
|
|
309
|
-
- Given test, When test, Then test
|
|
310
|
-
`;
|
|
311
|
-
const result = parseBmadEpics(content);
|
|
312
|
-
assert.equal(result.success, false);
|
|
313
|
-
assert.ok(result.errors?.some(e => e.message.includes('Priority')));
|
|
314
|
-
});
|
|
315
|
-
it('should report invalid priority value', () => {
|
|
316
|
-
const content = `## Epic 1: Test
|
|
317
|
-
|
|
318
|
-
Test.
|
|
319
|
-
|
|
320
|
-
### Story 1.1: Test
|
|
321
|
-
**Points:** 5
|
|
322
|
-
**Priority:** P5
|
|
323
|
-
|
|
324
|
-
#### Description
|
|
325
|
-
Test.
|
|
326
|
-
|
|
327
|
-
#### Acceptance Criteria
|
|
328
|
-
- Given test, When test, Then test
|
|
329
|
-
`;
|
|
330
|
-
const result = parseBmadEpics(content);
|
|
331
|
-
assert.equal(result.success, false);
|
|
332
|
-
assert.ok(result.errors?.some(e => e.message.includes('Priority')));
|
|
333
|
-
});
|
|
334
|
-
it('should report invalid story ID format', () => {
|
|
335
|
-
const content = `## Epic 1: Test
|
|
336
|
-
|
|
337
|
-
Test.
|
|
338
|
-
|
|
339
|
-
### Story abc: Test
|
|
340
|
-
**Points:** 5
|
|
341
|
-
**Priority:** P0
|
|
342
|
-
|
|
343
|
-
#### Description
|
|
344
|
-
Test.
|
|
345
|
-
|
|
346
|
-
#### Acceptance Criteria
|
|
347
|
-
- Given test, When test, Then test
|
|
348
|
-
`;
|
|
349
|
-
const result = parseBmadEpics(content);
|
|
350
|
-
// Story with invalid ID won't be matched by the regex, so no error
|
|
351
|
-
// This is expected behavior - malformed headers are silently skipped
|
|
352
|
-
assert.equal(result.success, true);
|
|
353
|
-
assert.equal(result.epics?.epics[0].stories.length, 0);
|
|
354
|
-
});
|
|
355
|
-
it('should include story location in error messages', () => {
|
|
356
|
-
const content = `## Epic 1: Test
|
|
357
|
-
|
|
358
|
-
Test.
|
|
359
|
-
|
|
360
|
-
### Story 1.1: Test
|
|
361
|
-
**Priority:** P0
|
|
362
|
-
|
|
363
|
-
#### Description
|
|
364
|
-
Test.
|
|
365
|
-
|
|
366
|
-
#### Acceptance Criteria
|
|
367
|
-
- Given test, When test, Then test
|
|
368
|
-
`;
|
|
369
|
-
const result = parseBmadEpics(content);
|
|
370
|
-
assert.equal(result.success, false);
|
|
371
|
-
assert.ok(result.errors?.some(e => e.location === 'Story 1.1'));
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
|
-
describe('Edge Cases', () => {
|
|
375
|
-
it('should handle epic with no stories', () => {
|
|
376
|
-
const content = `## Epic 1: Empty Epic
|
|
377
|
-
|
|
378
|
-
This epic has no stories yet.
|
|
379
|
-
`;
|
|
380
|
-
const result = parseBmadEpics(content);
|
|
381
|
-
assert.equal(result.success, true);
|
|
382
|
-
assert.equal(result.epics?.epics[0].stories.length, 0);
|
|
383
|
-
assert.equal(result.epics?.epics[0].description, 'This epic has no stories yet.');
|
|
384
|
-
});
|
|
385
|
-
it('should handle missing description section in story', () => {
|
|
386
|
-
const content = `## Epic 1: Test
|
|
387
|
-
|
|
388
|
-
Test.
|
|
389
|
-
|
|
390
|
-
### Story 1.1: Test
|
|
391
|
-
**Points:** 1
|
|
392
|
-
**Priority:** P0
|
|
393
|
-
|
|
394
|
-
#### Acceptance Criteria
|
|
395
|
-
- Given test, When test, Then test
|
|
396
|
-
`;
|
|
397
|
-
const result = parseBmadEpics(content);
|
|
398
|
-
assert.equal(result.success, true);
|
|
399
|
-
assert.equal(result.epics?.epics[0].stories[0].description, '');
|
|
400
|
-
});
|
|
401
|
-
it('should handle Windows line endings', () => {
|
|
402
|
-
const content = `## Epic 1: Test\r\n\r\nTest epic.\r\n\r\n### Story 1.1: Test\r\n**Points:** 1\r\n**Priority:** P0\r\n\r\n#### Description\r\nTest.\r\n\r\n#### Acceptance Criteria\r\n- Given test, When test, Then test\r\n`;
|
|
403
|
-
const result = parseBmadEpics(content);
|
|
404
|
-
assert.equal(result.success, true);
|
|
405
|
-
assert.equal(result.epics?.epics[0].stories.length, 1);
|
|
406
|
-
});
|
|
407
|
-
it('should handle priority values with different casing', () => {
|
|
408
|
-
const content = `## Epic 1: Test
|
|
409
|
-
|
|
410
|
-
Test.
|
|
411
|
-
|
|
412
|
-
### Story 1.1: Test
|
|
413
|
-
**Points:** 1
|
|
414
|
-
**Priority:** p1
|
|
415
|
-
|
|
416
|
-
#### Description
|
|
417
|
-
Test.
|
|
418
|
-
|
|
419
|
-
#### Acceptance Criteria
|
|
420
|
-
- Given test, When test, Then test
|
|
421
|
-
`;
|
|
422
|
-
const result = parseBmadEpics(content);
|
|
423
|
-
assert.equal(result.success, true);
|
|
424
|
-
assert.equal(result.epics?.epics[0].stories[0].priority, 'P1');
|
|
425
|
-
});
|
|
426
|
-
it('should preserve original BMAD ID alongside converted ID', () => {
|
|
427
|
-
const content = `## Epic 1: Test
|
|
428
|
-
|
|
429
|
-
Test.
|
|
430
|
-
|
|
431
|
-
### Story 1.5: Test
|
|
432
|
-
**Points:** 1
|
|
433
|
-
**Priority:** P0
|
|
434
|
-
|
|
435
|
-
#### Description
|
|
436
|
-
Test.
|
|
437
|
-
|
|
438
|
-
#### Acceptance Criteria
|
|
439
|
-
- Given test, When test, Then test
|
|
440
|
-
`;
|
|
441
|
-
const result = parseBmadEpics(content);
|
|
442
|
-
assert.equal(result.success, true);
|
|
443
|
-
const story = result.epics?.epics[0].stories[0];
|
|
444
|
-
assert.equal(story?.id, '1-5'); // Converted format
|
|
445
|
-
assert.equal(story?.bmadId, '1.5'); // Original format
|
|
446
|
-
});
|
|
447
|
-
});
|
|
448
|
-
});
|
|
449
|
-
//# sourceMappingURL=epics-parser.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"epics-parser.test.js","sourceRoot":"","sources":["../../src/bmad/epics-parser.test.ts"],"names":[],"mappings":"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"}
|
package/dist/bmad/index.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BMAD Module - Stories 32-2, 32-3, 32-4, 32-5, 32-6
|
|
3
|
-
*
|
|
4
|
-
* Utilities for parsing, importing, and exporting BMAD artifacts.
|
|
5
|
-
*/
|
|
6
|
-
export { parseBmadStory, type BmadStory, type BmadTask, type BmadAcceptanceCriteria, type ParseResult, type ParseError, } from './story-parser.js';
|
|
7
|
-
export { parseBmadEpics, convertStoryId, isValidStoryId, parseStoryId, type BmadEpic, type BmadEpicStory, type BmadEpicsFile, type BmadRequirement, type EpicsParseResult, type EpicsParseError, } from './epics-parser.js';
|
|
8
|
-
export { parseBmadContext, type BmadProjectContext, type TechnologyStack, type ImplementationRule, type AiAgentGuidance, type ExternalDependency, type ContextParseResult, type ContextParseError, } from './context-reader.js';
|
|
9
|
-
export { exportToBmadStory, type SessionData, type AcceptanceCriterion, type Task, type ExportResult, type ExportError, type ExportOptions, } from './story-exporter.js';
|
|
10
|
-
export { bmadIdToPenny, pennyIdToBmad, isValidBmadStoryId, isValidPennyStoryId, mapBmadToPennyStatus, mapPennyToBmadStatus, parseBmadSprintStatus, convertBmadStoryToPenny, importFromBmadStatus, convertPennyStoryToBmad, exportToSprintStatus, detectConflicts, type BmadStatus, type BmadSprintInfo, type BmadStoryStatus, type BmadMetrics, type BmadSprintStatus, type PennyStatus, type PennyStoryStatus, type PennySprintSummary, type SyncError, type ParseResult as StatusParseResult, type ExportResult as StatusExportResult, type Conflict, type ConflictResult, type ImportResult, } from './status-sync.js';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/bmad/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bmad/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,cAAc,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEnB,oBAAoB,EACpB,oBAAoB,EAEpB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EAEpB,eAAe,EAEf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,WAAW,IAAI,iBAAiB,EACrC,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC"}
|
package/dist/bmad/index.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BMAD Module - Stories 32-2, 32-3, 32-4, 32-5, 32-6
|
|
3
|
-
*
|
|
4
|
-
* Utilities for parsing, importing, and exporting BMAD artifacts.
|
|
5
|
-
*/
|
|
6
|
-
// Story parser (32-2)
|
|
7
|
-
export { parseBmadStory, } from './story-parser.js';
|
|
8
|
-
// Epics parser (32-3)
|
|
9
|
-
export { parseBmadEpics, convertStoryId, isValidStoryId, parseStoryId, } from './epics-parser.js';
|
|
10
|
-
// Context reader (32-4)
|
|
11
|
-
export { parseBmadContext, } from './context-reader.js';
|
|
12
|
-
// Story exporter (32-5)
|
|
13
|
-
export { exportToBmadStory, } from './story-exporter.js';
|
|
14
|
-
// Status sync (32-6)
|
|
15
|
-
export {
|
|
16
|
-
// Story ID conversion
|
|
17
|
-
bmadIdToPenny, pennyIdToBmad, isValidBmadStoryId, isValidPennyStoryId,
|
|
18
|
-
// Status mapping
|
|
19
|
-
mapBmadToPennyStatus, mapPennyToBmadStatus,
|
|
20
|
-
// Parse, Import, Export
|
|
21
|
-
parseBmadSprintStatus, convertBmadStoryToPenny, importFromBmadStatus, convertPennyStoryToBmad, exportToSprintStatus,
|
|
22
|
-
// Conflict detection
|
|
23
|
-
detectConflicts, } from './status-sync.js';
|
|
24
|
-
//# sourceMappingURL=index.js.map
|
package/dist/bmad/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bmad/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,OAAO,EACL,cAAc,GAMf,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,GAOb,MAAM,mBAAmB,CAAC;AAE3B,wBAAwB;AACxB,OAAO,EACL,gBAAgB,GAQjB,MAAM,qBAAqB,CAAC;AAE7B,wBAAwB;AACxB,OAAO,EACL,iBAAiB,GAOlB,MAAM,qBAAqB,CAAC;AAE7B,qBAAqB;AACrB,OAAO;AACL,sBAAsB;AACtB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,mBAAmB;AACnB,iBAAiB;AACjB,oBAAoB,EACpB,oBAAoB;AACpB,wBAAwB;AACxB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB;AACpB,qBAAqB;AACrB,eAAe,GAkBhB,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BMAD Status Sync - Story 32-6
|
|
3
|
-
*
|
|
4
|
-
* Bidirectional sync between Pennyfarthing sprint YAML and BMAD sprint-status.yaml.
|
|
5
|
-
*
|
|
6
|
-
* Features:
|
|
7
|
-
* - Parse BMAD sprint-status.yaml format
|
|
8
|
-
* - Import BMAD status into Pennyfarthing format
|
|
9
|
-
* - Export Pennyfarthing status to BMAD format
|
|
10
|
-
* - Detect conflicts when both have changed
|
|
11
|
-
*
|
|
12
|
-
* Story ID Conversion:
|
|
13
|
-
* - BMAD uses dot notation: "1.1", "32.6"
|
|
14
|
-
* - Pennyfarthing uses dash notation: "1-1", "32-6"
|
|
15
|
-
*
|
|
16
|
-
* Status Mapping:
|
|
17
|
-
* - BMAD 'ready-for-dev' ↔ Pennyfarthing 'backlog'
|
|
18
|
-
* - BMAD 'in-progress' ↔ Pennyfarthing 'in_progress'
|
|
19
|
-
* - BMAD 'review' ↔ Pennyfarthing 'needs_review'
|
|
20
|
-
* - BMAD 'done' ↔ Pennyfarthing 'done'
|
|
21
|
-
* - BMAD 'blocked' → Pennyfarthing 'backlog' (with blocked_reason)
|
|
22
|
-
*/
|
|
23
|
-
export type BmadStatus = 'ready-for-dev' | 'in-progress' | 'review' | 'done' | 'blocked';
|
|
24
|
-
export interface BmadSprintInfo {
|
|
25
|
-
number: number;
|
|
26
|
-
goal: string;
|
|
27
|
-
start_date: string;
|
|
28
|
-
end_date: string;
|
|
29
|
-
}
|
|
30
|
-
export interface BmadStoryStatus {
|
|
31
|
-
id: string;
|
|
32
|
-
title: string;
|
|
33
|
-
epic?: string;
|
|
34
|
-
status: BmadStatus;
|
|
35
|
-
assignee?: string;
|
|
36
|
-
points: number;
|
|
37
|
-
priority: 'P0' | 'P1' | 'P2';
|
|
38
|
-
started?: string;
|
|
39
|
-
completed?: string;
|
|
40
|
-
blockers?: string[];
|
|
41
|
-
}
|
|
42
|
-
export interface BmadMetrics {
|
|
43
|
-
total_points: number;
|
|
44
|
-
completed_points: number;
|
|
45
|
-
in_progress_points?: number;
|
|
46
|
-
velocity?: number;
|
|
47
|
-
burndown?: Array<{
|
|
48
|
-
date: string;
|
|
49
|
-
remaining: number;
|
|
50
|
-
}>;
|
|
51
|
-
}
|
|
52
|
-
export interface BmadSprintStatus {
|
|
53
|
-
sprint: BmadSprintInfo;
|
|
54
|
-
stories: BmadStoryStatus[];
|
|
55
|
-
metrics: BmadMetrics;
|
|
56
|
-
}
|
|
57
|
-
export type PennyStatus = 'backlog' | 'in_progress' | 'needs_review' | 'approved' | 'done';
|
|
58
|
-
export interface PennyStoryStatus {
|
|
59
|
-
id: string;
|
|
60
|
-
title: string;
|
|
61
|
-
status: PennyStatus;
|
|
62
|
-
points: number;
|
|
63
|
-
priority: string;
|
|
64
|
-
assigned_to?: string;
|
|
65
|
-
started?: string;
|
|
66
|
-
completed?: string;
|
|
67
|
-
blocked_reason?: string;
|
|
68
|
-
}
|
|
69
|
-
export interface PennySprintSummary {
|
|
70
|
-
total_points: number;
|
|
71
|
-
completed_points: number;
|
|
72
|
-
remaining_points: number;
|
|
73
|
-
}
|
|
74
|
-
export interface SyncError {
|
|
75
|
-
field: string;
|
|
76
|
-
message: string;
|
|
77
|
-
storyId?: string;
|
|
78
|
-
}
|
|
79
|
-
export interface ParseResult {
|
|
80
|
-
success: boolean;
|
|
81
|
-
data?: BmadSprintStatus;
|
|
82
|
-
errors?: SyncError[];
|
|
83
|
-
}
|
|
84
|
-
export interface ExportResult {
|
|
85
|
-
success: boolean;
|
|
86
|
-
yaml?: string;
|
|
87
|
-
errors?: SyncError[];
|
|
88
|
-
}
|
|
89
|
-
export interface Conflict {
|
|
90
|
-
storyId: string;
|
|
91
|
-
field: string;
|
|
92
|
-
bmadValue: string | number | undefined;
|
|
93
|
-
pennyValue: string | number | undefined;
|
|
94
|
-
message: string;
|
|
95
|
-
}
|
|
96
|
-
export interface ConflictResult {
|
|
97
|
-
hasConflicts: boolean;
|
|
98
|
-
conflicts: Conflict[];
|
|
99
|
-
}
|
|
100
|
-
export interface ImportResult {
|
|
101
|
-
success: boolean;
|
|
102
|
-
updatedStories?: Array<{
|
|
103
|
-
id: string;
|
|
104
|
-
field: string;
|
|
105
|
-
oldValue: unknown;
|
|
106
|
-
newValue: unknown;
|
|
107
|
-
}>;
|
|
108
|
-
errors?: SyncError[];
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Convert BMAD story ID (dot notation) to Pennyfarthing (dash notation).
|
|
112
|
-
* Example: "32.6" → "32-6"
|
|
113
|
-
*/
|
|
114
|
-
export declare function bmadIdToPenny(bmadId: string): string;
|
|
115
|
-
/**
|
|
116
|
-
* Convert Pennyfarthing story ID (dash notation) to BMAD (dot notation).
|
|
117
|
-
* Example: "32-6" → "32.6"
|
|
118
|
-
*/
|
|
119
|
-
export declare function pennyIdToBmad(pennyId: string): string;
|
|
120
|
-
/**
|
|
121
|
-
* Validate BMAD story ID format (N.M where N and M are positive integers).
|
|
122
|
-
*/
|
|
123
|
-
export declare function isValidBmadStoryId(id: string): boolean;
|
|
124
|
-
/**
|
|
125
|
-
* Validate Pennyfarthing story ID format (N-M where N and M are positive integers).
|
|
126
|
-
*/
|
|
127
|
-
export declare function isValidPennyStoryId(id: string): boolean;
|
|
128
|
-
/**
|
|
129
|
-
* Map BMAD status to Pennyfarthing status.
|
|
130
|
-
*/
|
|
131
|
-
export declare function mapBmadToPennyStatus(bmadStatus: BmadStatus): PennyStatus;
|
|
132
|
-
/**
|
|
133
|
-
* Map Pennyfarthing status to BMAD status.
|
|
134
|
-
*/
|
|
135
|
-
export declare function mapPennyToBmadStatus(pennyStatus: PennyStatus): BmadStatus;
|
|
136
|
-
/**
|
|
137
|
-
* Parse BMAD sprint-status.yaml content.
|
|
138
|
-
*
|
|
139
|
-
* Validates the schema and returns structured data or errors.
|
|
140
|
-
*/
|
|
141
|
-
export declare function parseBmadSprintStatus(yamlContent: string): ParseResult;
|
|
142
|
-
/**
|
|
143
|
-
* Convert a BMAD story to Pennyfarthing format.
|
|
144
|
-
*/
|
|
145
|
-
export declare function convertBmadStoryToPenny(bmadStory: BmadStoryStatus): PennyStoryStatus;
|
|
146
|
-
/**
|
|
147
|
-
* Import BMAD sprint status and merge into Pennyfarthing story list.
|
|
148
|
-
*
|
|
149
|
-
* Updates existing stories, adds new ones from BMAD.
|
|
150
|
-
* Preserves Pennyfarthing-only fields.
|
|
151
|
-
*/
|
|
152
|
-
export declare function importFromBmadStatus(bmadStatus: BmadSprintStatus, existingStories: PennyStoryStatus[]): ImportResult;
|
|
153
|
-
/**
|
|
154
|
-
* Convert a Pennyfarthing story to BMAD format.
|
|
155
|
-
*/
|
|
156
|
-
export declare function convertPennyStoryToBmad(pennyStory: PennyStoryStatus): BmadStoryStatus;
|
|
157
|
-
/**
|
|
158
|
-
* Export Pennyfarthing sprint to BMAD sprint-status.yaml format.
|
|
159
|
-
*/
|
|
160
|
-
export declare function exportToSprintStatus(sprintInfo: {
|
|
161
|
-
number: number;
|
|
162
|
-
goal: string;
|
|
163
|
-
start_date: string;
|
|
164
|
-
end_date: string;
|
|
165
|
-
}, stories: PennyStoryStatus[]): ExportResult;
|
|
166
|
-
/**
|
|
167
|
-
* Detect conflicts between BMAD and Pennyfarthing story statuses.
|
|
168
|
-
*
|
|
169
|
-
* A conflict occurs when both have changes for the same story
|
|
170
|
-
* (detected by comparing against a baseline or timestamp).
|
|
171
|
-
*/
|
|
172
|
-
export declare function detectConflicts(bmadStories: BmadStoryStatus[], pennyStories: PennyStoryStatus[]): ConflictResult;
|
|
173
|
-
//# sourceMappingURL=status-sync.d.ts.map
|