@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,607 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 31-3: Story-to-workflow Routing Engine
|
|
3
|
-
*
|
|
4
|
-
* These tests define the contract for routing stories to workflows based on:
|
|
5
|
-
* - Explicit workflow tags (highest priority)
|
|
6
|
-
* - Trigger matching (tags, types, points)
|
|
7
|
-
* - Default fallback workflow
|
|
8
|
-
*
|
|
9
|
-
* The router (workflow-router.ts) will implement these functions to pass these tests.
|
|
10
|
-
*
|
|
11
|
-
* Acceptance Criteria:
|
|
12
|
-
* - AC1: Stories with workflow tag use specified workflow
|
|
13
|
-
* - AC2: Story type mapping to workflows configurable
|
|
14
|
-
* - AC3: Default workflow when no match
|
|
15
|
-
* - AC4: Routing decision logged for debugging
|
|
16
|
-
*
|
|
17
|
-
* Run with: npm test
|
|
18
|
-
*/
|
|
19
|
-
import { describe, it } from 'node:test';
|
|
20
|
-
import assert from 'node:assert';
|
|
21
|
-
import { dirname, join } from 'node:path';
|
|
22
|
-
import { fileURLToPath } from 'node:url';
|
|
23
|
-
import { existsSync } from 'node:fs';
|
|
24
|
-
// Import the router function
|
|
25
|
-
import { routeStoryToWorkflow } from './workflow-router.js';
|
|
26
|
-
// =============================================================================
|
|
27
|
-
// Test Fixtures - Workflow definitions for testing
|
|
28
|
-
// =============================================================================
|
|
29
|
-
/**
|
|
30
|
-
* Creates a minimal valid workflow for testing
|
|
31
|
-
*/
|
|
32
|
-
function createWorkflow(name, triggers) {
|
|
33
|
-
return {
|
|
34
|
-
name,
|
|
35
|
-
phases: [{ name: 'work', agent: 'dev' }],
|
|
36
|
-
triggers
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
// Standard test workflows
|
|
40
|
-
const tddWorkflow = createWorkflow('tdd', {
|
|
41
|
-
types: ['feature'],
|
|
42
|
-
default: true
|
|
43
|
-
});
|
|
44
|
-
const trivialWorkflow = createWorkflow('trivial', {
|
|
45
|
-
types: ['chore', 'fix'],
|
|
46
|
-
points: { max: 2 }
|
|
47
|
-
});
|
|
48
|
-
const docsWorkflow = createWorkflow('docs', {
|
|
49
|
-
types: ['docs'],
|
|
50
|
-
tags: ['documentation']
|
|
51
|
-
});
|
|
52
|
-
const debugWorkflow = createWorkflow('debug', {
|
|
53
|
-
tags: ['debug', 'investigation']
|
|
54
|
-
});
|
|
55
|
-
const pointsWorkflow = createWorkflow('complex', {
|
|
56
|
-
points: { min: 8 }
|
|
57
|
-
});
|
|
58
|
-
const midRangeWorkflow = createWorkflow('mid-range', {
|
|
59
|
-
points: { min: 3, max: 5 }
|
|
60
|
-
});
|
|
61
|
-
// =============================================================================
|
|
62
|
-
// AC1: Stories with workflow tag use specified workflow
|
|
63
|
-
// =============================================================================
|
|
64
|
-
describe('AC1: Explicit workflow tag routing', () => {
|
|
65
|
-
it('should route story with workflow:tdd tag to tdd workflow', () => {
|
|
66
|
-
const story = {
|
|
67
|
-
id: '31-3',
|
|
68
|
-
tags: ['workflow:tdd', 'feature']
|
|
69
|
-
};
|
|
70
|
-
const workflows = [tddWorkflow, trivialWorkflow, docsWorkflow];
|
|
71
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
72
|
-
assert.ok(result, 'Should return a result');
|
|
73
|
-
assert.strictEqual(result.workflow.name, 'tdd', 'Should match tdd workflow');
|
|
74
|
-
assert.ok(result.reason.includes('tag'), 'Reason should mention tag match');
|
|
75
|
-
});
|
|
76
|
-
it('should route story with workflow:trivial tag to trivial workflow', () => {
|
|
77
|
-
const story = {
|
|
78
|
-
id: '31-3',
|
|
79
|
-
tags: ['workflow:trivial']
|
|
80
|
-
};
|
|
81
|
-
const workflows = [tddWorkflow, trivialWorkflow, docsWorkflow];
|
|
82
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
83
|
-
assert.ok(result, 'Should return a result');
|
|
84
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'Should match trivial workflow');
|
|
85
|
-
});
|
|
86
|
-
it('should prioritize explicit tag over type match', () => {
|
|
87
|
-
// Story has type=feature (would match tdd) but explicit workflow:trivial tag
|
|
88
|
-
const story = {
|
|
89
|
-
id: '31-3',
|
|
90
|
-
type: 'feature',
|
|
91
|
-
tags: ['workflow:trivial']
|
|
92
|
-
};
|
|
93
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
94
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
95
|
-
assert.ok(result, 'Should return a result');
|
|
96
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'Explicit tag should win over type');
|
|
97
|
-
});
|
|
98
|
-
it('should prioritize explicit tag over default workflow', () => {
|
|
99
|
-
const story = {
|
|
100
|
-
id: '31-3',
|
|
101
|
-
tags: ['workflow:docs']
|
|
102
|
-
};
|
|
103
|
-
const workflows = [tddWorkflow, docsWorkflow]; // tdd has default: true
|
|
104
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
105
|
-
assert.ok(result, 'Should return a result');
|
|
106
|
-
assert.strictEqual(result.workflow.name, 'docs', 'Explicit tag should win over default');
|
|
107
|
-
});
|
|
108
|
-
it('should return null if explicit tag references non-existent workflow', () => {
|
|
109
|
-
const story = {
|
|
110
|
-
id: '31-3',
|
|
111
|
-
tags: ['workflow:nonexistent']
|
|
112
|
-
};
|
|
113
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
114
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
115
|
-
// When explicit tag doesn't match, fall back to other rules
|
|
116
|
-
// If nothing matches, should return null or default
|
|
117
|
-
// This tests that we don't crash on bad tags
|
|
118
|
-
assert.ok(result === null || result.workflow.name === 'tdd', 'Should return null or fall back to default');
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
// =============================================================================
|
|
122
|
-
// AC2: Story type mapping to workflows configurable
|
|
123
|
-
// =============================================================================
|
|
124
|
-
describe('AC2: Type-based routing', () => {
|
|
125
|
-
it('should route feature type to workflow with types: [feature]', () => {
|
|
126
|
-
const story = {
|
|
127
|
-
id: '31-3',
|
|
128
|
-
type: 'feature'
|
|
129
|
-
};
|
|
130
|
-
const workflows = [tddWorkflow, trivialWorkflow, docsWorkflow];
|
|
131
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
132
|
-
assert.ok(result, 'Should return a result');
|
|
133
|
-
assert.strictEqual(result.workflow.name, 'tdd', 'Should match tdd workflow');
|
|
134
|
-
assert.ok(result.reason.includes('type'), 'Reason should mention type match');
|
|
135
|
-
});
|
|
136
|
-
it('should route chore type to workflow with types: [chore, fix]', () => {
|
|
137
|
-
const story = {
|
|
138
|
-
id: '31-3',
|
|
139
|
-
type: 'chore',
|
|
140
|
-
points: 1
|
|
141
|
-
};
|
|
142
|
-
const workflows = [tddWorkflow, trivialWorkflow, docsWorkflow];
|
|
143
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
144
|
-
assert.ok(result, 'Should return a result');
|
|
145
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'Should match trivial workflow');
|
|
146
|
-
});
|
|
147
|
-
it('should route docs type to docs workflow', () => {
|
|
148
|
-
const story = {
|
|
149
|
-
id: '31-3',
|
|
150
|
-
type: 'docs'
|
|
151
|
-
};
|
|
152
|
-
const workflows = [tddWorkflow, trivialWorkflow, docsWorkflow];
|
|
153
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
154
|
-
assert.ok(result, 'Should return a result');
|
|
155
|
-
assert.strictEqual(result.workflow.name, 'docs', 'Should match docs workflow');
|
|
156
|
-
});
|
|
157
|
-
it('should handle story with type not matching any workflow triggers', () => {
|
|
158
|
-
const story = {
|
|
159
|
-
id: '31-3',
|
|
160
|
-
type: 'unknown-type'
|
|
161
|
-
};
|
|
162
|
-
const noDefaultWorkflows = [trivialWorkflow, docsWorkflow]; // No default
|
|
163
|
-
const result = routeStoryToWorkflow(story, noDefaultWorkflows);
|
|
164
|
-
assert.strictEqual(result, null, 'Should return null when no match and no default');
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
// =============================================================================
|
|
168
|
-
// AC2 Continued: Tag-based routing (from triggers.tags, not workflow: prefix)
|
|
169
|
-
// =============================================================================
|
|
170
|
-
describe('AC2: Tag-based routing (trigger tags)', () => {
|
|
171
|
-
it('should route story with matching trigger tag', () => {
|
|
172
|
-
const story = {
|
|
173
|
-
id: '31-3',
|
|
174
|
-
tags: ['debug', 'urgent']
|
|
175
|
-
};
|
|
176
|
-
const workflows = [tddWorkflow, debugWorkflow];
|
|
177
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
178
|
-
assert.ok(result, 'Should return a result');
|
|
179
|
-
assert.strictEqual(result.workflow.name, 'debug', 'Should match debug workflow via tag');
|
|
180
|
-
});
|
|
181
|
-
it('should match if any story tag matches any workflow trigger tag', () => {
|
|
182
|
-
const story = {
|
|
183
|
-
id: '31-3',
|
|
184
|
-
tags: ['other', 'investigation'] // investigation matches debugWorkflow
|
|
185
|
-
};
|
|
186
|
-
const workflows = [tddWorkflow, debugWorkflow];
|
|
187
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
188
|
-
assert.ok(result, 'Should return a result');
|
|
189
|
-
assert.strictEqual(result.workflow.name, 'debug', 'Should match via investigation tag');
|
|
190
|
-
});
|
|
191
|
-
it('should match documentation tag for docs workflow', () => {
|
|
192
|
-
const story = {
|
|
193
|
-
id: '31-3',
|
|
194
|
-
tags: ['documentation']
|
|
195
|
-
};
|
|
196
|
-
const workflows = [tddWorkflow, docsWorkflow];
|
|
197
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
198
|
-
assert.ok(result, 'Should return a result');
|
|
199
|
-
assert.strictEqual(result.workflow.name, 'docs', 'Should match docs via tag');
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
// =============================================================================
|
|
203
|
-
// AC2 Continued: Points-based routing
|
|
204
|
-
// =============================================================================
|
|
205
|
-
describe('AC2: Points-based routing', () => {
|
|
206
|
-
it('should route low-point story to workflow with points.max', () => {
|
|
207
|
-
const story = {
|
|
208
|
-
id: '31-3',
|
|
209
|
-
type: 'chore',
|
|
210
|
-
points: 1
|
|
211
|
-
};
|
|
212
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
213
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
214
|
-
assert.ok(result, 'Should return a result');
|
|
215
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'Should match trivial (max: 2)');
|
|
216
|
-
});
|
|
217
|
-
it('should route high-point story to workflow with points.min', () => {
|
|
218
|
-
const story = {
|
|
219
|
-
id: '31-3',
|
|
220
|
-
points: 13
|
|
221
|
-
};
|
|
222
|
-
const workflows = [tddWorkflow, pointsWorkflow];
|
|
223
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
224
|
-
assert.ok(result, 'Should return a result');
|
|
225
|
-
assert.strictEqual(result.workflow.name, 'complex', 'Should match complex (min: 8)');
|
|
226
|
-
});
|
|
227
|
-
it('should route mid-point story to workflow with points range', () => {
|
|
228
|
-
const story = {
|
|
229
|
-
id: '31-3',
|
|
230
|
-
points: 4
|
|
231
|
-
};
|
|
232
|
-
const workflows = [tddWorkflow, midRangeWorkflow, pointsWorkflow];
|
|
233
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
234
|
-
assert.ok(result, 'Should return a result');
|
|
235
|
-
assert.strictEqual(result.workflow.name, 'mid-range', 'Should match mid-range (3-5)');
|
|
236
|
-
});
|
|
237
|
-
it('should not match points.max if story points exceed it', () => {
|
|
238
|
-
const story = {
|
|
239
|
-
id: '31-3',
|
|
240
|
-
type: 'chore',
|
|
241
|
-
points: 5 // exceeds trivialWorkflow max: 2
|
|
242
|
-
};
|
|
243
|
-
const workflows = [trivialWorkflow]; // Only trivial, no default
|
|
244
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
245
|
-
assert.strictEqual(result, null, 'Should not match trivial when points > max');
|
|
246
|
-
});
|
|
247
|
-
it('should not match points.min if story points below it', () => {
|
|
248
|
-
const story = {
|
|
249
|
-
id: '31-3',
|
|
250
|
-
points: 3 // below pointsWorkflow min: 8
|
|
251
|
-
};
|
|
252
|
-
const workflows = [pointsWorkflow]; // Only complex, no default
|
|
253
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
254
|
-
assert.strictEqual(result, null, 'Should not match complex when points < min');
|
|
255
|
-
});
|
|
256
|
-
it('should handle boundary case: points exactly at min', () => {
|
|
257
|
-
const story = {
|
|
258
|
-
id: '31-3',
|
|
259
|
-
points: 8 // exactly at pointsWorkflow min
|
|
260
|
-
};
|
|
261
|
-
const workflows = [pointsWorkflow];
|
|
262
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
263
|
-
assert.ok(result, 'Should return a result');
|
|
264
|
-
assert.strictEqual(result.workflow.name, 'complex', 'Should match at exact min boundary');
|
|
265
|
-
});
|
|
266
|
-
it('should handle boundary case: points exactly at max', () => {
|
|
267
|
-
const story = {
|
|
268
|
-
id: '31-3',
|
|
269
|
-
type: 'chore',
|
|
270
|
-
points: 2 // exactly at trivialWorkflow max
|
|
271
|
-
};
|
|
272
|
-
const workflows = [trivialWorkflow];
|
|
273
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
274
|
-
assert.ok(result, 'Should return a result');
|
|
275
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'Should match at exact max boundary');
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
// =============================================================================
|
|
279
|
-
// AC3: Default workflow when no match
|
|
280
|
-
// =============================================================================
|
|
281
|
-
describe('AC3: Default workflow fallback', () => {
|
|
282
|
-
it('should use default workflow when no other triggers match', () => {
|
|
283
|
-
const story = {
|
|
284
|
-
id: '31-3',
|
|
285
|
-
type: 'random-type'
|
|
286
|
-
};
|
|
287
|
-
const workflows = [tddWorkflow, trivialWorkflow]; // tdd has default: true
|
|
288
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
289
|
-
assert.ok(result, 'Should return a result');
|
|
290
|
-
assert.strictEqual(result.workflow.name, 'tdd', 'Should fall back to default');
|
|
291
|
-
assert.ok(result.reason.includes('default'), 'Reason should mention default');
|
|
292
|
-
});
|
|
293
|
-
it('should use default workflow for story with no metadata', () => {
|
|
294
|
-
const story = {
|
|
295
|
-
id: '31-3'
|
|
296
|
-
// No type, tags, or points
|
|
297
|
-
};
|
|
298
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
299
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
300
|
-
assert.ok(result, 'Should return a result');
|
|
301
|
-
assert.strictEqual(result.workflow.name, 'tdd', 'Should use default for bare story');
|
|
302
|
-
});
|
|
303
|
-
it('should return null when no workflows loaded', () => {
|
|
304
|
-
const story = {
|
|
305
|
-
id: '31-3',
|
|
306
|
-
type: 'feature'
|
|
307
|
-
};
|
|
308
|
-
const workflows = [];
|
|
309
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
310
|
-
assert.strictEqual(result, null, 'Should return null for empty workflow list');
|
|
311
|
-
});
|
|
312
|
-
it('should return null when no match and no default workflow', () => {
|
|
313
|
-
const story = {
|
|
314
|
-
id: '31-3',
|
|
315
|
-
type: 'feature'
|
|
316
|
-
};
|
|
317
|
-
const noDefaultWorkflows = [docsWorkflow, debugWorkflow]; // Neither has default
|
|
318
|
-
const result = routeStoryToWorkflow(story, noDefaultWorkflows);
|
|
319
|
-
assert.strictEqual(result, null, 'Should return null when no match and no default');
|
|
320
|
-
});
|
|
321
|
-
it('should handle multiple workflows with default: true (first wins)', () => {
|
|
322
|
-
const defaultWorkflow1 = createWorkflow('default1', { default: true });
|
|
323
|
-
const defaultWorkflow2 = createWorkflow('default2', { default: true });
|
|
324
|
-
const story = { id: '31-3' };
|
|
325
|
-
const workflows = [defaultWorkflow1, defaultWorkflow2];
|
|
326
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
327
|
-
assert.ok(result, 'Should return a result');
|
|
328
|
-
assert.strictEqual(result.workflow.name, 'default1', 'First default should win');
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
// =============================================================================
|
|
332
|
-
// AC4: Routing decision logged for debugging
|
|
333
|
-
// =============================================================================
|
|
334
|
-
describe('AC4: Routing reason for debugging', () => {
|
|
335
|
-
it('should include reason mentioning explicit tag for tag match', () => {
|
|
336
|
-
const story = {
|
|
337
|
-
id: '31-3',
|
|
338
|
-
tags: ['workflow:trivial']
|
|
339
|
-
};
|
|
340
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
341
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
342
|
-
assert.ok(result, 'Should return a result');
|
|
343
|
-
assert.ok(result.reason, 'Should have a reason');
|
|
344
|
-
assert.ok(result.reason.toLowerCase().includes('tag') ||
|
|
345
|
-
result.reason.toLowerCase().includes('workflow:trivial'), `Reason should mention tag match: "${result.reason}"`);
|
|
346
|
-
});
|
|
347
|
-
it('should include reason mentioning type for type match', () => {
|
|
348
|
-
const story = {
|
|
349
|
-
id: '31-3',
|
|
350
|
-
type: 'feature'
|
|
351
|
-
};
|
|
352
|
-
const workflows = [tddWorkflow];
|
|
353
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
354
|
-
assert.ok(result, 'Should return a result');
|
|
355
|
-
assert.ok(result.reason, 'Should have a reason');
|
|
356
|
-
assert.ok(result.reason.toLowerCase().includes('type') ||
|
|
357
|
-
result.reason.toLowerCase().includes('feature'), `Reason should mention type match: "${result.reason}"`);
|
|
358
|
-
});
|
|
359
|
-
it('should include reason mentioning points for points match', () => {
|
|
360
|
-
const story = {
|
|
361
|
-
id: '31-3',
|
|
362
|
-
points: 10
|
|
363
|
-
};
|
|
364
|
-
const workflows = [pointsWorkflow];
|
|
365
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
366
|
-
assert.ok(result, 'Should return a result');
|
|
367
|
-
assert.ok(result.reason, 'Should have a reason');
|
|
368
|
-
assert.ok(result.reason.toLowerCase().includes('point'), `Reason should mention points match: "${result.reason}"`);
|
|
369
|
-
});
|
|
370
|
-
it('should include reason mentioning default for default fallback', () => {
|
|
371
|
-
const story = {
|
|
372
|
-
id: '31-3'
|
|
373
|
-
};
|
|
374
|
-
const workflows = [tddWorkflow];
|
|
375
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
376
|
-
assert.ok(result, 'Should return a result');
|
|
377
|
-
assert.ok(result.reason, 'Should have a reason');
|
|
378
|
-
assert.ok(result.reason.toLowerCase().includes('default'), `Reason should mention default: "${result.reason}"`);
|
|
379
|
-
});
|
|
380
|
-
it('should include workflow name in reason', () => {
|
|
381
|
-
const story = {
|
|
382
|
-
id: '31-3',
|
|
383
|
-
type: 'feature'
|
|
384
|
-
};
|
|
385
|
-
const workflows = [tddWorkflow];
|
|
386
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
387
|
-
assert.ok(result, 'Should return a result');
|
|
388
|
-
assert.ok(result.reason.includes('tdd'), `Reason should include workflow name: "${result.reason}"`);
|
|
389
|
-
});
|
|
390
|
-
});
|
|
391
|
-
// =============================================================================
|
|
392
|
-
// Priority Algorithm Tests
|
|
393
|
-
// =============================================================================
|
|
394
|
-
describe('Priority Algorithm', () => {
|
|
395
|
-
it('priority: explicit tag > trigger tag > type > points > default', () => {
|
|
396
|
-
// Workflow that matches by type, tag, AND has default
|
|
397
|
-
const multiMatchWorkflow = createWorkflow('multi', {
|
|
398
|
-
tags: ['special'],
|
|
399
|
-
types: ['feature'],
|
|
400
|
-
default: true
|
|
401
|
-
});
|
|
402
|
-
// Workflow that only matches by explicit tag
|
|
403
|
-
const explicitOnlyWorkflow = createWorkflow('explicit-only', {});
|
|
404
|
-
const story = {
|
|
405
|
-
id: '31-3',
|
|
406
|
-
type: 'feature',
|
|
407
|
-
tags: ['workflow:explicit-only', 'special'],
|
|
408
|
-
points: 3
|
|
409
|
-
};
|
|
410
|
-
const workflows = [multiMatchWorkflow, explicitOnlyWorkflow];
|
|
411
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
412
|
-
assert.ok(result, 'Should return a result');
|
|
413
|
-
assert.strictEqual(result.workflow.name, 'explicit-only', 'Explicit workflow: tag should have highest priority');
|
|
414
|
-
});
|
|
415
|
-
it('priority: trigger tag should beat type match', () => {
|
|
416
|
-
const tagWorkflow = createWorkflow('tag-match', {
|
|
417
|
-
tags: ['priority-test']
|
|
418
|
-
});
|
|
419
|
-
const typeWorkflow = createWorkflow('type-match', {
|
|
420
|
-
types: ['feature']
|
|
421
|
-
});
|
|
422
|
-
const story = {
|
|
423
|
-
id: '31-3',
|
|
424
|
-
type: 'feature',
|
|
425
|
-
tags: ['priority-test']
|
|
426
|
-
};
|
|
427
|
-
const workflows = [typeWorkflow, tagWorkflow];
|
|
428
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
429
|
-
assert.ok(result, 'Should return a result');
|
|
430
|
-
assert.strictEqual(result.workflow.name, 'tag-match', 'Tag match should beat type match');
|
|
431
|
-
});
|
|
432
|
-
it('priority: type match should beat points match', () => {
|
|
433
|
-
const typeWorkflow = createWorkflow('type-match', {
|
|
434
|
-
types: ['feature']
|
|
435
|
-
});
|
|
436
|
-
const pointsOnlyWorkflow = createWorkflow('points-match', {
|
|
437
|
-
points: { min: 1, max: 10 }
|
|
438
|
-
});
|
|
439
|
-
const story = {
|
|
440
|
-
id: '31-3',
|
|
441
|
-
type: 'feature',
|
|
442
|
-
points: 5
|
|
443
|
-
};
|
|
444
|
-
const workflows = [pointsOnlyWorkflow, typeWorkflow];
|
|
445
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
446
|
-
assert.ok(result, 'Should return a result');
|
|
447
|
-
assert.strictEqual(result.workflow.name, 'type-match', 'Type match should beat points-only match');
|
|
448
|
-
});
|
|
449
|
-
it('priority: any specific match should beat default', () => {
|
|
450
|
-
const defaultWorkflow = createWorkflow('default-wf', {
|
|
451
|
-
default: true
|
|
452
|
-
});
|
|
453
|
-
const pointsWorkflow = createWorkflow('points-wf', {
|
|
454
|
-
points: { min: 3 }
|
|
455
|
-
});
|
|
456
|
-
const story = {
|
|
457
|
-
id: '31-3',
|
|
458
|
-
points: 5
|
|
459
|
-
};
|
|
460
|
-
const workflows = [defaultWorkflow, pointsWorkflow];
|
|
461
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
462
|
-
assert.ok(result, 'Should return a result');
|
|
463
|
-
assert.strictEqual(result.workflow.name, 'points-wf', 'Points match should beat default');
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
// =============================================================================
|
|
467
|
-
// Edge Cases
|
|
468
|
-
// =============================================================================
|
|
469
|
-
describe('Edge Cases', () => {
|
|
470
|
-
it('should handle story with empty tags array', () => {
|
|
471
|
-
const story = {
|
|
472
|
-
id: '31-3',
|
|
473
|
-
tags: []
|
|
474
|
-
};
|
|
475
|
-
const workflows = [tddWorkflow];
|
|
476
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
477
|
-
assert.ok(result, 'Should return default workflow');
|
|
478
|
-
assert.strictEqual(result.workflow.name, 'tdd');
|
|
479
|
-
});
|
|
480
|
-
it('should handle workflow with empty triggers object', () => {
|
|
481
|
-
const emptyTriggersWorkflow = createWorkflow('empty-triggers', {});
|
|
482
|
-
const story = {
|
|
483
|
-
id: '31-3',
|
|
484
|
-
type: 'feature'
|
|
485
|
-
};
|
|
486
|
-
const workflows = [emptyTriggersWorkflow];
|
|
487
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
488
|
-
// Empty triggers shouldn't match anything specific
|
|
489
|
-
assert.strictEqual(result, null, 'Empty triggers should not match');
|
|
490
|
-
});
|
|
491
|
-
it('should handle workflow with undefined triggers', () => {
|
|
492
|
-
const noTriggersWorkflow = createWorkflow('no-triggers');
|
|
493
|
-
const story = {
|
|
494
|
-
id: '31-3',
|
|
495
|
-
type: 'feature'
|
|
496
|
-
};
|
|
497
|
-
const workflows = [noTriggersWorkflow];
|
|
498
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
499
|
-
assert.strictEqual(result, null, 'Undefined triggers should not match');
|
|
500
|
-
});
|
|
501
|
-
it('should handle story with undefined points for points-based workflow', () => {
|
|
502
|
-
const story = {
|
|
503
|
-
id: '31-3'
|
|
504
|
-
// No points defined
|
|
505
|
-
};
|
|
506
|
-
const workflows = [pointsWorkflow]; // Requires min: 8
|
|
507
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
508
|
-
assert.strictEqual(result, null, 'Should not match points trigger when story has no points');
|
|
509
|
-
});
|
|
510
|
-
it('should handle story with zero points', () => {
|
|
511
|
-
const story = {
|
|
512
|
-
id: '31-3',
|
|
513
|
-
type: 'chore',
|
|
514
|
-
points: 0
|
|
515
|
-
};
|
|
516
|
-
const workflows = [trivialWorkflow]; // max: 2
|
|
517
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
518
|
-
assert.ok(result, 'Should match (0 <= 2)');
|
|
519
|
-
assert.strictEqual(result.workflow.name, 'trivial');
|
|
520
|
-
});
|
|
521
|
-
it('should be case-sensitive for workflow names in tags', () => {
|
|
522
|
-
const story = {
|
|
523
|
-
id: '31-3',
|
|
524
|
-
tags: ['workflow:TDD'] // Uppercase
|
|
525
|
-
};
|
|
526
|
-
const workflows = [tddWorkflow]; // name is 'tdd' lowercase
|
|
527
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
528
|
-
// Should NOT match because TDD !== tdd
|
|
529
|
-
assert.ok(result === null || result.reason.includes('default'), 'Should not match case-mismatched workflow name (or fall to default)');
|
|
530
|
-
});
|
|
531
|
-
it('should handle multiple workflow: tags (first wins)', () => {
|
|
532
|
-
const story = {
|
|
533
|
-
id: '31-3',
|
|
534
|
-
tags: ['workflow:trivial', 'workflow:tdd']
|
|
535
|
-
};
|
|
536
|
-
const workflows = [tddWorkflow, trivialWorkflow];
|
|
537
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
538
|
-
assert.ok(result, 'Should return a result');
|
|
539
|
-
assert.strictEqual(result.workflow.name, 'trivial', 'First workflow: tag should win');
|
|
540
|
-
});
|
|
541
|
-
});
|
|
542
|
-
// =============================================================================
|
|
543
|
-
// Integration Tests with Real Workflows
|
|
544
|
-
// =============================================================================
|
|
545
|
-
describe('Integration: Real workflow files', () => {
|
|
546
|
-
// Helper to find monorepo root
|
|
547
|
-
function findMonorepoRoot(startDir) {
|
|
548
|
-
let dir = startDir;
|
|
549
|
-
for (let i = 0; i < 10; i++) {
|
|
550
|
-
if (existsSync(join(dir, 'pennyfarthing-dist'))) {
|
|
551
|
-
return dir;
|
|
552
|
-
}
|
|
553
|
-
const parent = dirname(dir);
|
|
554
|
-
if (parent === dir)
|
|
555
|
-
break;
|
|
556
|
-
dir = parent;
|
|
557
|
-
}
|
|
558
|
-
return null;
|
|
559
|
-
}
|
|
560
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
561
|
-
const monorepoRoot = findMonorepoRoot(__dirname);
|
|
562
|
-
it('should route feature story to tdd workflow from real files', async () => {
|
|
563
|
-
if (!monorepoRoot) {
|
|
564
|
-
console.log('Skipping: monorepo root not found');
|
|
565
|
-
return;
|
|
566
|
-
}
|
|
567
|
-
// Import loader to get real workflows
|
|
568
|
-
const { loadWorkflowsFromDir } = await import('./workflow-loader.js');
|
|
569
|
-
const workflowsDir = join(monorepoRoot, 'pennyfarthing-dist', 'workflows');
|
|
570
|
-
const { workflows } = loadWorkflowsFromDir(workflowsDir);
|
|
571
|
-
if (workflows.length === 0) {
|
|
572
|
-
console.log('Skipping: no workflows found');
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
const story = {
|
|
576
|
-
id: '31-3',
|
|
577
|
-
type: 'feature',
|
|
578
|
-
points: 3
|
|
579
|
-
};
|
|
580
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
581
|
-
assert.ok(result, 'Should route to a workflow');
|
|
582
|
-
// tdd.yaml should be the default for features
|
|
583
|
-
console.log(`Routed to: ${result.workflow.name} (${result.reason})`);
|
|
584
|
-
});
|
|
585
|
-
it('should route chore story to trivial workflow from real files', async () => {
|
|
586
|
-
if (!monorepoRoot) {
|
|
587
|
-
console.log('Skipping: monorepo root not found');
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
const { loadWorkflowsFromDir } = await import('./workflow-loader.js');
|
|
591
|
-
const workflowsDir = join(monorepoRoot, 'pennyfarthing-dist', 'workflows');
|
|
592
|
-
const { workflows } = loadWorkflowsFromDir(workflowsDir);
|
|
593
|
-
if (workflows.length === 0) {
|
|
594
|
-
console.log('Skipping: no workflows found');
|
|
595
|
-
return;
|
|
596
|
-
}
|
|
597
|
-
const story = {
|
|
598
|
-
id: '31-3',
|
|
599
|
-
type: 'chore',
|
|
600
|
-
points: 1
|
|
601
|
-
};
|
|
602
|
-
const result = routeStoryToWorkflow(story, workflows);
|
|
603
|
-
assert.ok(result, 'Should route to a workflow');
|
|
604
|
-
console.log(`Routed to: ${result.workflow.name} (${result.reason})`);
|
|
605
|
-
});
|
|
606
|
-
});
|
|
607
|
-
//# sourceMappingURL=workflow-router.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-router.test.js","sourceRoot":"","sources":["../../src/workflow/workflow-router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-schema.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-schema.ts"],"names":[],"mappings":"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"}
|