@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic-handoff.js","sourceRoot":"","sources":["../../src/workflow/generic-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 31-7: Generic Workflow-Driven Handoff Subagent
|
|
3
|
-
*
|
|
4
|
-
* These tests define the contract for the generic handoff module that
|
|
5
|
-
* replaces 5 hardcoded handoff files (sm-handoff, tea-handoff, dev-handoff,
|
|
6
|
-
* reviewer-handoff-approve, reviewer-handoff-reject).
|
|
7
|
-
*
|
|
8
|
-
* The generic handoff reads phase requirements from workflow definitions
|
|
9
|
-
* and performs gate checks based on phase gate type.
|
|
10
|
-
*
|
|
11
|
-
* Test categories:
|
|
12
|
-
* 1. findCurrentPhase() - Locate phase by name in workflow
|
|
13
|
-
* 2. getNextPhase() - Determine next phase (forward or rejection loop)
|
|
14
|
-
* 3. checkGate() - Run gate-specific checks
|
|
15
|
-
* 4. formatPhaseTransition() - Format session file updates
|
|
16
|
-
* 5. Integration - Full handoff scenarios with TDD/trivial workflows
|
|
17
|
-
*
|
|
18
|
-
* Run with: npm test
|
|
19
|
-
*/
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=generic-handoff.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic-handoff.test.d.ts","sourceRoot":"","sources":["../../src/workflow/generic-handoff.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
|
|
@@ -1,499 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 31-7: Generic Workflow-Driven Handoff Subagent
|
|
3
|
-
*
|
|
4
|
-
* These tests define the contract for the generic handoff module that
|
|
5
|
-
* replaces 5 hardcoded handoff files (sm-handoff, tea-handoff, dev-handoff,
|
|
6
|
-
* reviewer-handoff-approve, reviewer-handoff-reject).
|
|
7
|
-
*
|
|
8
|
-
* The generic handoff reads phase requirements from workflow definitions
|
|
9
|
-
* and performs gate checks based on phase gate type.
|
|
10
|
-
*
|
|
11
|
-
* Test categories:
|
|
12
|
-
* 1. findCurrentPhase() - Locate phase by name in workflow
|
|
13
|
-
* 2. getNextPhase() - Determine next phase (forward or rejection loop)
|
|
14
|
-
* 3. checkGate() - Run gate-specific checks
|
|
15
|
-
* 4. formatPhaseTransition() - Format session file updates
|
|
16
|
-
* 5. Integration - Full handoff scenarios with TDD/trivial workflows
|
|
17
|
-
*
|
|
18
|
-
* Run with: npm test
|
|
19
|
-
*/
|
|
20
|
-
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
21
|
-
import assert from 'node:assert';
|
|
22
|
-
import { mkdirSync, rmSync, existsSync } from 'node:fs';
|
|
23
|
-
import { join, dirname } from 'node:path';
|
|
24
|
-
import { fileURLToPath } from 'node:url';
|
|
25
|
-
// Import the generic handoff functions
|
|
26
|
-
import { findCurrentPhase, getNextPhase, checkGate, formatPhaseTransition, calculateDuration } from './generic-handoff.js';
|
|
27
|
-
// Get directory for test fixtures
|
|
28
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
29
|
-
const TEST_DIR = join(__dirname, '__test_handoff__');
|
|
30
|
-
// Helper to find monorepo root for integration tests
|
|
31
|
-
function findMonorepoRoot(startDir) {
|
|
32
|
-
let dir = startDir;
|
|
33
|
-
for (let i = 0; i < 10; i++) {
|
|
34
|
-
if (existsSync(join(dir, 'pennyfarthing-dist'))) {
|
|
35
|
-
return dir;
|
|
36
|
-
}
|
|
37
|
-
const parent = dirname(dir);
|
|
38
|
-
if (parent === dir)
|
|
39
|
-
break;
|
|
40
|
-
dir = parent;
|
|
41
|
-
}
|
|
42
|
-
throw new Error(`Could not find monorepo root from ${startDir}`);
|
|
43
|
-
}
|
|
44
|
-
// Test fixture: TDD workflow definition
|
|
45
|
-
const TDD_WORKFLOW = {
|
|
46
|
-
name: 'tdd',
|
|
47
|
-
description: 'Test-driven development with code review',
|
|
48
|
-
version: '1.0.0',
|
|
49
|
-
phases: [
|
|
50
|
-
{ name: 'setup', agent: 'sm', output: ['session_file', 'branches', 'story_context'] },
|
|
51
|
-
{
|
|
52
|
-
name: 'red',
|
|
53
|
-
agent: 'tea',
|
|
54
|
-
input: ['session_file', 'story_context'],
|
|
55
|
-
output: ['failing_tests'],
|
|
56
|
-
gate: { type: 'tests_fail', condition: 'All acceptance criteria have test coverage' }
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
name: 'green',
|
|
60
|
-
agent: 'dev',
|
|
61
|
-
input: ['failing_tests', 'story_context'],
|
|
62
|
-
output: ['implementation', 'passing_tests'],
|
|
63
|
-
gate: { type: 'tests_pass', condition: 'All tests passing, no skipped tests' }
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: 'review',
|
|
67
|
-
agent: 'reviewer',
|
|
68
|
-
input: ['implementation', 'passing_tests'],
|
|
69
|
-
output: ['approval'],
|
|
70
|
-
gate: { type: 'approval', condition: 'Code review approved, no blocking issues' }
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
name: 'finish',
|
|
74
|
-
agent: 'sm',
|
|
75
|
-
input: ['approval'],
|
|
76
|
-
output: ['archived_session', 'story_summary']
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
triggers: { types: ['feature', 'enhancement'], points: { min: 3 }, default: true }
|
|
80
|
-
};
|
|
81
|
-
// Test fixture: Trivial workflow definition
|
|
82
|
-
const TRIVIAL_WORKFLOW = {
|
|
83
|
-
name: 'trivial',
|
|
84
|
-
description: 'Quick fixes without full TDD ceremony',
|
|
85
|
-
version: '1.0.0',
|
|
86
|
-
phases: [
|
|
87
|
-
{ name: 'setup', agent: 'sm', output: ['session_file', 'branches'] },
|
|
88
|
-
{
|
|
89
|
-
name: 'implement',
|
|
90
|
-
agent: 'dev',
|
|
91
|
-
input: ['session_file'],
|
|
92
|
-
output: ['implementation'],
|
|
93
|
-
gate: { type: 'tests_pass', condition: 'Existing tests still pass' }
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: 'review',
|
|
97
|
-
agent: 'reviewer',
|
|
98
|
-
input: ['implementation'],
|
|
99
|
-
output: ['approval'],
|
|
100
|
-
gate: { type: 'approval' }
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
name: 'finish',
|
|
104
|
-
agent: 'sm',
|
|
105
|
-
input: ['approval'],
|
|
106
|
-
output: ['archived_session']
|
|
107
|
-
}
|
|
108
|
-
],
|
|
109
|
-
triggers: { types: ['chore', 'fix', 'refactor'], points: { max: 2 } }
|
|
110
|
-
};
|
|
111
|
-
describe('Generic Handoff (31-7)', () => {
|
|
112
|
-
// Setup/teardown for test fixtures
|
|
113
|
-
beforeEach(() => {
|
|
114
|
-
if (existsSync(TEST_DIR)) {
|
|
115
|
-
rmSync(TEST_DIR, { recursive: true });
|
|
116
|
-
}
|
|
117
|
-
mkdirSync(TEST_DIR, { recursive: true });
|
|
118
|
-
});
|
|
119
|
-
afterEach(() => {
|
|
120
|
-
if (existsSync(TEST_DIR)) {
|
|
121
|
-
rmSync(TEST_DIR, { recursive: true });
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
describe('findCurrentPhase() - Locate phase by name', () => {
|
|
125
|
-
it('should find phase by exact name match', () => {
|
|
126
|
-
// AC: Reads gate type from workflow
|
|
127
|
-
const phase = findCurrentPhase(TDD_WORKFLOW, 'red');
|
|
128
|
-
assert.ok(phase, 'Should find the red phase');
|
|
129
|
-
assert.strictEqual(phase.name, 'red');
|
|
130
|
-
assert.strictEqual(phase.agent, 'tea');
|
|
131
|
-
assert.strictEqual(phase.gate?.type, 'tests_fail');
|
|
132
|
-
});
|
|
133
|
-
it('should find setup phase (no gate)', () => {
|
|
134
|
-
const phase = findCurrentPhase(TDD_WORKFLOW, 'setup');
|
|
135
|
-
assert.ok(phase, 'Should find setup phase');
|
|
136
|
-
assert.strictEqual(phase.name, 'setup');
|
|
137
|
-
assert.strictEqual(phase.agent, 'sm');
|
|
138
|
-
assert.strictEqual(phase.gate, undefined, 'Setup should have no gate');
|
|
139
|
-
});
|
|
140
|
-
it('should return null for non-existent phase', () => {
|
|
141
|
-
const phase = findCurrentPhase(TDD_WORKFLOW, 'nonexistent');
|
|
142
|
-
assert.strictEqual(phase, null, 'Should return null for unknown phase');
|
|
143
|
-
});
|
|
144
|
-
it('should find phase in trivial workflow', () => {
|
|
145
|
-
const phase = findCurrentPhase(TRIVIAL_WORKFLOW, 'implement');
|
|
146
|
-
assert.ok(phase, 'Should find implement phase');
|
|
147
|
-
assert.strictEqual(phase.agent, 'dev');
|
|
148
|
-
assert.strictEqual(phase.gate?.type, 'tests_pass');
|
|
149
|
-
});
|
|
150
|
-
it('should be case-sensitive', () => {
|
|
151
|
-
const phase = findCurrentPhase(TDD_WORKFLOW, 'RED');
|
|
152
|
-
assert.strictEqual(phase, null, 'Phase names are case-sensitive');
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
describe('getNextPhase() - Determine next phase', () => {
|
|
156
|
-
it('should return next phase in sequence for forward progression', () => {
|
|
157
|
-
// AC: Determines next agent from workflow phases array
|
|
158
|
-
const next = getNextPhase(TDD_WORKFLOW, 'setup');
|
|
159
|
-
assert.ok(next, 'Should find next phase');
|
|
160
|
-
assert.strictEqual(next.name, 'red');
|
|
161
|
-
assert.strictEqual(next.agent, 'tea');
|
|
162
|
-
});
|
|
163
|
-
it('should return next phase from red to green', () => {
|
|
164
|
-
const next = getNextPhase(TDD_WORKFLOW, 'red');
|
|
165
|
-
assert.ok(next, 'Should find next phase');
|
|
166
|
-
assert.strictEqual(next.name, 'green');
|
|
167
|
-
assert.strictEqual(next.agent, 'dev');
|
|
168
|
-
});
|
|
169
|
-
it('should return next phase from green to review', () => {
|
|
170
|
-
const next = getNextPhase(TDD_WORKFLOW, 'green');
|
|
171
|
-
assert.ok(next, 'Should find next phase');
|
|
172
|
-
assert.strictEqual(next.name, 'review');
|
|
173
|
-
assert.strictEqual(next.agent, 'reviewer');
|
|
174
|
-
});
|
|
175
|
-
it('should return finish phase from review (when approved)', () => {
|
|
176
|
-
const next = getNextPhase(TDD_WORKFLOW, 'review');
|
|
177
|
-
assert.ok(next, 'Should find next phase');
|
|
178
|
-
assert.strictEqual(next.name, 'finish');
|
|
179
|
-
assert.strictEqual(next.agent, 'sm');
|
|
180
|
-
});
|
|
181
|
-
it('should return null when at final phase', () => {
|
|
182
|
-
const next = getNextPhase(TDD_WORKFLOW, 'finish');
|
|
183
|
-
assert.strictEqual(next, null, 'No next phase after finish');
|
|
184
|
-
});
|
|
185
|
-
it('should return null for non-existent current phase', () => {
|
|
186
|
-
const next = getNextPhase(TDD_WORKFLOW, 'nonexistent');
|
|
187
|
-
assert.strictEqual(next, null, 'No next phase for unknown phase');
|
|
188
|
-
});
|
|
189
|
-
it('should handle rejection loop back to dev phase', () => {
|
|
190
|
-
// AC: Handles rejection flows (Reviewer → Dev loop)
|
|
191
|
-
const next = getNextPhase(TDD_WORKFLOW, 'review', { verdict: 'rejected' });
|
|
192
|
-
assert.ok(next, 'Should find phase to loop back to');
|
|
193
|
-
assert.strictEqual(next.name, 'green', 'Should loop back to green (dev) phase');
|
|
194
|
-
assert.strictEqual(next.agent, 'dev');
|
|
195
|
-
});
|
|
196
|
-
it('should proceed forward on approval', () => {
|
|
197
|
-
const next = getNextPhase(TDD_WORKFLOW, 'review', { verdict: 'approved' });
|
|
198
|
-
assert.ok(next, 'Should find next phase');
|
|
199
|
-
assert.strictEqual(next.name, 'finish');
|
|
200
|
-
});
|
|
201
|
-
it('should handle trivial workflow progression', () => {
|
|
202
|
-
// Trivial: setup → implement → review → finish
|
|
203
|
-
const next1 = getNextPhase(TRIVIAL_WORKFLOW, 'setup');
|
|
204
|
-
assert.strictEqual(next1?.name, 'implement');
|
|
205
|
-
const next2 = getNextPhase(TRIVIAL_WORKFLOW, 'implement');
|
|
206
|
-
assert.strictEqual(next2?.name, 'review');
|
|
207
|
-
const next3 = getNextPhase(TRIVIAL_WORKFLOW, 'review');
|
|
208
|
-
assert.strictEqual(next3?.name, 'finish');
|
|
209
|
-
});
|
|
210
|
-
it('should find correct loop-back phase in trivial workflow on rejection', () => {
|
|
211
|
-
// In trivial, rejection from review should go back to implement
|
|
212
|
-
const next = getNextPhase(TRIVIAL_WORKFLOW, 'review', { verdict: 'rejected' });
|
|
213
|
-
assert.ok(next, 'Should find phase to loop back to');
|
|
214
|
-
assert.strictEqual(next.name, 'implement', 'Should loop back to implement phase');
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
describe('checkGate() - Run gate-specific checks', () => {
|
|
218
|
-
it('should pass gate for phase with no gate defined', () => {
|
|
219
|
-
// Setup phase has no gate
|
|
220
|
-
const result = checkGate(TDD_WORKFLOW, 'setup', {});
|
|
221
|
-
assert.strictEqual(result.passed, true, 'Phase with no gate should pass');
|
|
222
|
-
assert.strictEqual(result.gateType, undefined);
|
|
223
|
-
});
|
|
224
|
-
it('should identify tests_fail gate type', () => {
|
|
225
|
-
// AC: Reads gate type from workflow
|
|
226
|
-
const result = checkGate(TDD_WORKFLOW, 'red', {});
|
|
227
|
-
assert.strictEqual(result.gateType, 'tests_fail');
|
|
228
|
-
// The actual pass/fail depends on context provided
|
|
229
|
-
});
|
|
230
|
-
it('should identify tests_pass gate type', () => {
|
|
231
|
-
const result = checkGate(TDD_WORKFLOW, 'green', {});
|
|
232
|
-
assert.strictEqual(result.gateType, 'tests_pass');
|
|
233
|
-
});
|
|
234
|
-
it('should identify approval gate type', () => {
|
|
235
|
-
const result = checkGate(TDD_WORKFLOW, 'review', {});
|
|
236
|
-
assert.strictEqual(result.gateType, 'approval');
|
|
237
|
-
});
|
|
238
|
-
it('should pass tests_fail gate when tests are failing', () => {
|
|
239
|
-
// AC: Runs gate-specific checks (tests_fail → verify RED)
|
|
240
|
-
const result = checkGate(TDD_WORKFLOW, 'red', {
|
|
241
|
-
testsRed: true,
|
|
242
|
-
testFailCount: 3
|
|
243
|
-
});
|
|
244
|
-
assert.strictEqual(result.passed, true, 'Should pass when tests are RED');
|
|
245
|
-
assert.strictEqual(result.gateType, 'tests_fail');
|
|
246
|
-
});
|
|
247
|
-
it('should fail tests_fail gate when tests are passing', () => {
|
|
248
|
-
const result = checkGate(TDD_WORKFLOW, 'red', {
|
|
249
|
-
testsRed: false,
|
|
250
|
-
testFailCount: 0
|
|
251
|
-
});
|
|
252
|
-
assert.strictEqual(result.passed, false, 'Should fail when tests are GREEN (not RED)');
|
|
253
|
-
assert.ok(result.message, 'Should have failure message');
|
|
254
|
-
});
|
|
255
|
-
it('should pass tests_pass gate when all tests pass', () => {
|
|
256
|
-
// AC: Runs gate-specific checks (tests_pass → verify GREEN)
|
|
257
|
-
const result = checkGate(TDD_WORKFLOW, 'green', {
|
|
258
|
-
testsGreen: true,
|
|
259
|
-
testPassCount: 15,
|
|
260
|
-
testFailCount: 0
|
|
261
|
-
});
|
|
262
|
-
assert.strictEqual(result.passed, true, 'Should pass when tests are GREEN');
|
|
263
|
-
});
|
|
264
|
-
it('should fail tests_pass gate when tests are failing', () => {
|
|
265
|
-
const result = checkGate(TDD_WORKFLOW, 'green', {
|
|
266
|
-
testsGreen: false,
|
|
267
|
-
testPassCount: 12,
|
|
268
|
-
testFailCount: 3
|
|
269
|
-
});
|
|
270
|
-
assert.strictEqual(result.passed, false, 'Should fail when tests are RED');
|
|
271
|
-
assert.ok(result.message, 'Should have failure message');
|
|
272
|
-
});
|
|
273
|
-
it('should pass approval gate when verdict is approved', () => {
|
|
274
|
-
// AC: Runs gate-specific checks (approval → verify Assessment)
|
|
275
|
-
const result = checkGate(TDD_WORKFLOW, 'review', {
|
|
276
|
-
verdict: 'approved'
|
|
277
|
-
});
|
|
278
|
-
assert.strictEqual(result.passed, true, 'Should pass when approved');
|
|
279
|
-
});
|
|
280
|
-
it('should pass approval gate when verdict is rejected (rejection is valid outcome)', () => {
|
|
281
|
-
// Rejection is not a failure - it's a valid routing decision
|
|
282
|
-
const result = checkGate(TDD_WORKFLOW, 'review', {
|
|
283
|
-
verdict: 'rejected'
|
|
284
|
-
});
|
|
285
|
-
assert.strictEqual(result.passed, true, 'Rejection is a valid gate outcome');
|
|
286
|
-
});
|
|
287
|
-
it('should fail approval gate when no verdict provided', () => {
|
|
288
|
-
const result = checkGate(TDD_WORKFLOW, 'review', {});
|
|
289
|
-
assert.strictEqual(result.passed, false, 'Should fail without verdict');
|
|
290
|
-
assert.ok(result.message, 'Should have message about missing verdict');
|
|
291
|
-
});
|
|
292
|
-
it('should handle manual gate type (always pass)', () => {
|
|
293
|
-
// Create a workflow with manual gate
|
|
294
|
-
const manualWorkflow = {
|
|
295
|
-
name: 'manual-test',
|
|
296
|
-
phases: [
|
|
297
|
-
{ name: 'work', agent: 'dev', gate: { type: 'manual' } }
|
|
298
|
-
]
|
|
299
|
-
};
|
|
300
|
-
const result = checkGate(manualWorkflow, 'work', {});
|
|
301
|
-
assert.strictEqual(result.passed, true, 'Manual gate should always pass');
|
|
302
|
-
assert.strictEqual(result.gateType, 'manual');
|
|
303
|
-
});
|
|
304
|
-
it('should return error for non-existent phase', () => {
|
|
305
|
-
const result = checkGate(TDD_WORKFLOW, 'nonexistent', {});
|
|
306
|
-
assert.strictEqual(result.passed, false);
|
|
307
|
-
assert.ok(result.message?.includes('not found'), 'Should indicate phase not found');
|
|
308
|
-
});
|
|
309
|
-
});
|
|
310
|
-
describe('formatPhaseTransition() - Format session file updates', () => {
|
|
311
|
-
it('should format workflow tracking section correctly', () => {
|
|
312
|
-
// AC: Updates session file workflow section with phase transition
|
|
313
|
-
const result = formatPhaseTransition({
|
|
314
|
-
workflowName: 'tdd',
|
|
315
|
-
fromPhase: 'red',
|
|
316
|
-
toPhase: 'green',
|
|
317
|
-
startedAt: '2026-01-13T14:00:00Z',
|
|
318
|
-
endedAt: '2026-01-13T14:30:00Z'
|
|
319
|
-
});
|
|
320
|
-
assert.ok(result.includes('**Workflow:** tdd'), 'Should include workflow name');
|
|
321
|
-
assert.ok(result.includes('**Phase:** green'), 'Should include new phase');
|
|
322
|
-
assert.ok(result.includes('**Phase Started:**'), 'Should include phase started');
|
|
323
|
-
});
|
|
324
|
-
it('should include phase history table row', () => {
|
|
325
|
-
// AC: Records phase transitions with timestamps
|
|
326
|
-
const result = formatPhaseTransition({
|
|
327
|
-
workflowName: 'tdd',
|
|
328
|
-
fromPhase: 'red',
|
|
329
|
-
toPhase: 'green',
|
|
330
|
-
startedAt: '2026-01-13T14:00:00Z',
|
|
331
|
-
endedAt: '2026-01-13T14:30:00Z'
|
|
332
|
-
});
|
|
333
|
-
// Should have markdown table row for the completed phase
|
|
334
|
-
assert.ok(result.includes('| red |'), 'Should have row for from-phase');
|
|
335
|
-
assert.ok(result.includes('2026-01-13T14:00:00Z'), 'Should have start time');
|
|
336
|
-
assert.ok(result.includes('2026-01-13T14:30:00Z'), 'Should have end time');
|
|
337
|
-
});
|
|
338
|
-
it('should handle first phase transition (from setup)', () => {
|
|
339
|
-
const result = formatPhaseTransition({
|
|
340
|
-
workflowName: 'tdd',
|
|
341
|
-
fromPhase: 'setup',
|
|
342
|
-
toPhase: 'red',
|
|
343
|
-
startedAt: '2026-01-13T13:00:00Z',
|
|
344
|
-
endedAt: '2026-01-13T13:15:00Z'
|
|
345
|
-
});
|
|
346
|
-
assert.ok(result.includes('**Phase:** red'));
|
|
347
|
-
assert.ok(result.includes('| setup |'));
|
|
348
|
-
});
|
|
349
|
-
it('should handle rejection loop transition', () => {
|
|
350
|
-
// When going from review back to green (rejection)
|
|
351
|
-
const result = formatPhaseTransition({
|
|
352
|
-
workflowName: 'tdd',
|
|
353
|
-
fromPhase: 'review',
|
|
354
|
-
toPhase: 'green',
|
|
355
|
-
startedAt: '2026-01-13T15:00:00Z',
|
|
356
|
-
endedAt: '2026-01-13T15:30:00Z',
|
|
357
|
-
isRejection: true
|
|
358
|
-
});
|
|
359
|
-
assert.ok(result.includes('**Phase:** green'), 'Should show dev phase');
|
|
360
|
-
assert.ok(result.includes('| review |'), 'Should record review phase completion');
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
describe('calculateDuration() - Format duration strings', () => {
|
|
364
|
-
it('should format duration as minutes for short durations', () => {
|
|
365
|
-
// AC: Records phase transitions with timestamps (duration calculation)
|
|
366
|
-
const duration = calculateDuration('2026-01-13T14:00:00Z', '2026-01-13T14:30:00Z');
|
|
367
|
-
assert.strictEqual(duration, '30m', 'Should format as 30 minutes');
|
|
368
|
-
});
|
|
369
|
-
it('should format duration as hours and minutes for longer durations', () => {
|
|
370
|
-
const duration = calculateDuration('2026-01-13T14:00:00Z', '2026-01-13T16:30:00Z');
|
|
371
|
-
assert.strictEqual(duration, '2h 30m', 'Should format as 2 hours 30 minutes');
|
|
372
|
-
});
|
|
373
|
-
it('should format sub-minute durations', () => {
|
|
374
|
-
const duration = calculateDuration('2026-01-13T14:00:00Z', '2026-01-13T14:00:45Z');
|
|
375
|
-
// Either "45s" or "1m" is acceptable
|
|
376
|
-
assert.ok(duration === '45s' || duration === '1m' || duration === '0m', `Duration should be short: ${duration}`);
|
|
377
|
-
});
|
|
378
|
-
it('should handle same start and end time', () => {
|
|
379
|
-
const duration = calculateDuration('2026-01-13T14:00:00Z', '2026-01-13T14:00:00Z');
|
|
380
|
-
assert.ok(duration === '0m' || duration === '0s', 'Zero duration should format correctly');
|
|
381
|
-
});
|
|
382
|
-
it('should handle invalid timestamps gracefully', () => {
|
|
383
|
-
const duration = calculateDuration('invalid', '2026-01-13T14:00:00Z');
|
|
384
|
-
assert.ok(duration, 'Should return some value even for invalid input');
|
|
385
|
-
});
|
|
386
|
-
});
|
|
387
|
-
describe('Integration: Full handoff scenarios', () => {
|
|
388
|
-
it('should complete TDD workflow transition: setup → red', () => {
|
|
389
|
-
// AC: Backward compatible with existing TDD flow
|
|
390
|
-
const currentPhase = findCurrentPhase(TDD_WORKFLOW, 'setup');
|
|
391
|
-
const nextPhase = getNextPhase(TDD_WORKFLOW, 'setup');
|
|
392
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'setup', {});
|
|
393
|
-
assert.ok(currentPhase, 'Should find setup phase');
|
|
394
|
-
assert.strictEqual(gateResult.passed, true, 'Setup has no gate');
|
|
395
|
-
assert.strictEqual(nextPhase?.name, 'red');
|
|
396
|
-
assert.strictEqual(nextPhase?.agent, 'tea');
|
|
397
|
-
});
|
|
398
|
-
it('should complete TDD workflow transition: red → green', () => {
|
|
399
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'red', {
|
|
400
|
-
testsRed: true,
|
|
401
|
-
testFailCount: 5
|
|
402
|
-
});
|
|
403
|
-
const nextPhase = getNextPhase(TDD_WORKFLOW, 'red');
|
|
404
|
-
assert.strictEqual(gateResult.passed, true, 'Gate should pass with failing tests');
|
|
405
|
-
assert.strictEqual(nextPhase?.name, 'green');
|
|
406
|
-
assert.strictEqual(nextPhase?.agent, 'dev');
|
|
407
|
-
});
|
|
408
|
-
it('should complete TDD workflow transition: green → review', () => {
|
|
409
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'green', {
|
|
410
|
-
testsGreen: true,
|
|
411
|
-
testPassCount: 20,
|
|
412
|
-
testFailCount: 0
|
|
413
|
-
});
|
|
414
|
-
const nextPhase = getNextPhase(TDD_WORKFLOW, 'green');
|
|
415
|
-
assert.strictEqual(gateResult.passed, true, 'Gate should pass with passing tests');
|
|
416
|
-
assert.strictEqual(nextPhase?.name, 'review');
|
|
417
|
-
assert.strictEqual(nextPhase?.agent, 'reviewer');
|
|
418
|
-
});
|
|
419
|
-
it('should complete TDD workflow transition: review → finish (approved)', () => {
|
|
420
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'review', { verdict: 'approved' });
|
|
421
|
-
const nextPhase = getNextPhase(TDD_WORKFLOW, 'review', { verdict: 'approved' });
|
|
422
|
-
assert.strictEqual(gateResult.passed, true);
|
|
423
|
-
assert.strictEqual(nextPhase?.name, 'finish');
|
|
424
|
-
assert.strictEqual(nextPhase?.agent, 'sm');
|
|
425
|
-
});
|
|
426
|
-
it('should complete TDD workflow rejection loop: review → green', () => {
|
|
427
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'review', { verdict: 'rejected' });
|
|
428
|
-
const nextPhase = getNextPhase(TDD_WORKFLOW, 'review', { verdict: 'rejected' });
|
|
429
|
-
assert.strictEqual(gateResult.passed, true, 'Rejection is valid outcome');
|
|
430
|
-
assert.strictEqual(nextPhase?.name, 'green', 'Should loop back to dev');
|
|
431
|
-
assert.strictEqual(nextPhase?.agent, 'dev');
|
|
432
|
-
});
|
|
433
|
-
it('should complete trivial workflow: setup → implement → review → finish', () => {
|
|
434
|
-
// AC: Works with both TDD and trivial workflows
|
|
435
|
-
// setup → implement
|
|
436
|
-
let gateResult = checkGate(TRIVIAL_WORKFLOW, 'setup', {});
|
|
437
|
-
let nextPhase = getNextPhase(TRIVIAL_WORKFLOW, 'setup');
|
|
438
|
-
assert.strictEqual(gateResult.passed, true);
|
|
439
|
-
assert.strictEqual(nextPhase?.name, 'implement');
|
|
440
|
-
// implement → review
|
|
441
|
-
gateResult = checkGate(TRIVIAL_WORKFLOW, 'implement', {
|
|
442
|
-
testsGreen: true,
|
|
443
|
-
testPassCount: 10,
|
|
444
|
-
testFailCount: 0
|
|
445
|
-
});
|
|
446
|
-
nextPhase = getNextPhase(TRIVIAL_WORKFLOW, 'implement');
|
|
447
|
-
assert.strictEqual(gateResult.passed, true);
|
|
448
|
-
assert.strictEqual(nextPhase?.name, 'review');
|
|
449
|
-
// review → finish
|
|
450
|
-
gateResult = checkGate(TRIVIAL_WORKFLOW, 'review', { verdict: 'approved' });
|
|
451
|
-
nextPhase = getNextPhase(TRIVIAL_WORKFLOW, 'review', { verdict: 'approved' });
|
|
452
|
-
assert.strictEqual(gateResult.passed, true);
|
|
453
|
-
assert.strictEqual(nextPhase?.name, 'finish');
|
|
454
|
-
});
|
|
455
|
-
it('should block progression when gate fails', () => {
|
|
456
|
-
// Dev tries to hand off but tests are still failing
|
|
457
|
-
const gateResult = checkGate(TDD_WORKFLOW, 'green', {
|
|
458
|
-
testsGreen: false,
|
|
459
|
-
testPassCount: 15,
|
|
460
|
-
testFailCount: 5
|
|
461
|
-
});
|
|
462
|
-
assert.strictEqual(gateResult.passed, false, 'Should block when tests failing');
|
|
463
|
-
assert.ok(gateResult.message, 'Should explain why blocked');
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
describe('Integration with real workflow files', () => {
|
|
467
|
-
it('should work with loaded tdd.yaml workflow', async () => {
|
|
468
|
-
// AC: Backward compatible with existing TDD flow
|
|
469
|
-
const root = findMonorepoRoot(__dirname);
|
|
470
|
-
const { loadWorkflowFile } = await import('./workflow-loader.js');
|
|
471
|
-
const tddPath = join(root, 'pennyfarthing-dist', 'workflows', 'tdd.yaml');
|
|
472
|
-
const loadResult = loadWorkflowFile(tddPath);
|
|
473
|
-
assert.strictEqual(loadResult.success, true, 'tdd.yaml should load successfully');
|
|
474
|
-
const workflow = loadResult.workflow;
|
|
475
|
-
// Test phase lookup
|
|
476
|
-
const redPhase = findCurrentPhase(workflow, 'red');
|
|
477
|
-
assert.ok(redPhase, 'Should find red phase in loaded workflow');
|
|
478
|
-
assert.strictEqual(redPhase.agent, 'tea');
|
|
479
|
-
// Test progression
|
|
480
|
-
const nextPhase = getNextPhase(workflow, 'red');
|
|
481
|
-
assert.ok(nextPhase, 'Should find next phase');
|
|
482
|
-
assert.strictEqual(nextPhase.name, 'green');
|
|
483
|
-
});
|
|
484
|
-
it('should work with loaded trivial.yaml workflow', async () => {
|
|
485
|
-
const root = findMonorepoRoot(__dirname);
|
|
486
|
-
const { loadWorkflowFile } = await import('./workflow-loader.js');
|
|
487
|
-
const trivialPath = join(root, 'pennyfarthing-dist', 'workflows', 'trivial.yaml');
|
|
488
|
-
const loadResult = loadWorkflowFile(trivialPath);
|
|
489
|
-
assert.strictEqual(loadResult.success, true, 'trivial.yaml should load successfully');
|
|
490
|
-
const workflow = loadResult.workflow;
|
|
491
|
-
// Trivial skips TEA, goes setup → impl
|
|
492
|
-
const nextPhase = getNextPhase(workflow, 'setup');
|
|
493
|
-
assert.ok(nextPhase, 'Should find next phase');
|
|
494
|
-
assert.strictEqual(nextPhase.name, 'impl');
|
|
495
|
-
assert.strictEqual(nextPhase.agent, 'dev');
|
|
496
|
-
});
|
|
497
|
-
});
|
|
498
|
-
});
|
|
499
|
-
//# sourceMappingURL=generic-handoff.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generic-handoff.test.js","sourceRoot":"","sources":["../../src/workflow/generic-handoff.test.ts"],"names":[],"mappings":"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"}
|