@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,438 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 31-8: Test Result Caching
|
|
3
|
-
*
|
|
4
|
-
* These tests verify the test cache module that eliminates redundant
|
|
5
|
-
* test runs in subagents by caching results in the session file.
|
|
6
|
-
*
|
|
7
|
-
* Test categories:
|
|
8
|
-
* 1. parseTestCache() - Parse cache from session file markdown
|
|
9
|
-
* 2. validateTestCache() - Validate cache freshness
|
|
10
|
-
* 3. formatTestCache() - Format cache for session file
|
|
11
|
-
* 4. createTestCacheEntry() - Create entry from results
|
|
12
|
-
* 5. shouldSkipTests() - Convenience function for subagents
|
|
13
|
-
*
|
|
14
|
-
* Run with: npm test
|
|
15
|
-
*/
|
|
16
|
-
import { describe, it } from 'node:test';
|
|
17
|
-
import assert from 'node:assert';
|
|
18
|
-
import { parseTestCache, validateTestCache, formatTestCache, createTestCacheEntry, shouldSkipTests, DEFAULT_CACHE_MAX_AGE_MINUTES } from './test-cache.js';
|
|
19
|
-
// Test fixtures
|
|
20
|
-
const VALID_CACHE_SECTION = `## Test Cache
|
|
21
|
-
|
|
22
|
-
| Field | Value |
|
|
23
|
-
|-------|-------|
|
|
24
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
25
|
-
| Git SHA | abc1234def5678 |
|
|
26
|
-
| Result | GREEN |
|
|
27
|
-
| Pass | 78 |
|
|
28
|
-
| Fail | 0 |
|
|
29
|
-
| Duration | 36s |
|
|
30
|
-
`;
|
|
31
|
-
const CACHE_WITH_SKIPS = `## Test Cache
|
|
32
|
-
|
|
33
|
-
| Field | Value |
|
|
34
|
-
|-------|-------|
|
|
35
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
36
|
-
| Git SHA | abc1234def5678 |
|
|
37
|
-
| Result | YELLOW |
|
|
38
|
-
| Pass | 75 |
|
|
39
|
-
| Fail | 0 |
|
|
40
|
-
| Skip | 3 |
|
|
41
|
-
| Duration | 34s |
|
|
42
|
-
`;
|
|
43
|
-
const CACHE_WITH_FAILURES = `## Test Cache
|
|
44
|
-
|
|
45
|
-
| Field | Value |
|
|
46
|
-
|-------|-------|
|
|
47
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
48
|
-
| Git SHA | abc1234def5678 |
|
|
49
|
-
| Result | RED |
|
|
50
|
-
| Pass | 70 |
|
|
51
|
-
| Fail | 8 |
|
|
52
|
-
| Duration | 42s |
|
|
53
|
-
`;
|
|
54
|
-
const SESSION_WITH_CACHE = `# Story 31-8: Eliminate Redundant Test Runs
|
|
55
|
-
|
|
56
|
-
| Field | Value |
|
|
57
|
-
|-------|-------|
|
|
58
|
-
| Story | 31-8 |
|
|
59
|
-
| Title | Eliminate redundant test runs in subagents |
|
|
60
|
-
| Points | 2 |
|
|
61
|
-
|
|
62
|
-
## Acceptance Criteria
|
|
63
|
-
|
|
64
|
-
- [ ] Test suite runs only once per TDD phase
|
|
65
|
-
|
|
66
|
-
${VALID_CACHE_SECTION}
|
|
67
|
-
|
|
68
|
-
## Technical Context
|
|
69
|
-
|
|
70
|
-
Some context here...
|
|
71
|
-
`;
|
|
72
|
-
const SESSION_WITHOUT_CACHE = `# Story 31-8: Eliminate Redundant Test Runs
|
|
73
|
-
|
|
74
|
-
| Field | Value |
|
|
75
|
-
|-------|-------|
|
|
76
|
-
| Story | 31-8 |
|
|
77
|
-
| Title | Eliminate redundant test runs in subagents |
|
|
78
|
-
|
|
79
|
-
## Acceptance Criteria
|
|
80
|
-
|
|
81
|
-
- [ ] Test suite runs only once per TDD phase
|
|
82
|
-
|
|
83
|
-
## Technical Context
|
|
84
|
-
|
|
85
|
-
Some context here...
|
|
86
|
-
`;
|
|
87
|
-
describe('Test Cache (31-8)', () => {
|
|
88
|
-
describe('parseTestCache() - Parse cache from session file', () => {
|
|
89
|
-
it('should parse valid cache section with all required fields', () => {
|
|
90
|
-
const entry = parseTestCache(SESSION_WITH_CACHE);
|
|
91
|
-
assert.ok(entry, 'Should parse cache entry');
|
|
92
|
-
assert.strictEqual(entry.lastRun, '2026-01-14T09:00:00Z');
|
|
93
|
-
assert.strictEqual(entry.gitSha, 'abc1234def5678');
|
|
94
|
-
assert.strictEqual(entry.result, 'GREEN');
|
|
95
|
-
assert.strictEqual(entry.passCount, 78);
|
|
96
|
-
assert.strictEqual(entry.failCount, 0);
|
|
97
|
-
assert.strictEqual(entry.durationSeconds, 36);
|
|
98
|
-
});
|
|
99
|
-
it('should parse cache with skip count', () => {
|
|
100
|
-
const entry = parseTestCache(CACHE_WITH_SKIPS);
|
|
101
|
-
assert.ok(entry, 'Should parse cache entry');
|
|
102
|
-
assert.strictEqual(entry.result, 'YELLOW');
|
|
103
|
-
assert.strictEqual(entry.passCount, 75);
|
|
104
|
-
assert.strictEqual(entry.failCount, 0);
|
|
105
|
-
assert.strictEqual(entry.skipCount, 3);
|
|
106
|
-
});
|
|
107
|
-
it('should parse cache with failures', () => {
|
|
108
|
-
const entry = parseTestCache(CACHE_WITH_FAILURES);
|
|
109
|
-
assert.ok(entry, 'Should parse cache entry');
|
|
110
|
-
assert.strictEqual(entry.result, 'RED');
|
|
111
|
-
assert.strictEqual(entry.passCount, 70);
|
|
112
|
-
assert.strictEqual(entry.failCount, 8);
|
|
113
|
-
});
|
|
114
|
-
it('should return null when no cache section exists', () => {
|
|
115
|
-
const entry = parseTestCache(SESSION_WITHOUT_CACHE);
|
|
116
|
-
assert.strictEqual(entry, null);
|
|
117
|
-
});
|
|
118
|
-
it('should return null for malformed cache table', () => {
|
|
119
|
-
const malformed = `## Test Cache
|
|
120
|
-
|
|
121
|
-
| Field | Value |
|
|
122
|
-
|-------|-------|
|
|
123
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
124
|
-
`; // Missing required fields
|
|
125
|
-
const entry = parseTestCache(malformed);
|
|
126
|
-
assert.strictEqual(entry, null);
|
|
127
|
-
});
|
|
128
|
-
it('should return null for invalid result value', () => {
|
|
129
|
-
const invalid = `## Test Cache
|
|
130
|
-
|
|
131
|
-
| Field | Value |
|
|
132
|
-
|-------|-------|
|
|
133
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
134
|
-
| Git SHA | abc1234 |
|
|
135
|
-
| Result | INVALID |
|
|
136
|
-
| Pass | 78 |
|
|
137
|
-
| Fail | 0 |
|
|
138
|
-
| Duration | 36s |
|
|
139
|
-
`;
|
|
140
|
-
const entry = parseTestCache(invalid);
|
|
141
|
-
assert.strictEqual(entry, null);
|
|
142
|
-
});
|
|
143
|
-
it('should handle case-insensitive field names', () => {
|
|
144
|
-
const mixedCase = `## Test Cache
|
|
145
|
-
|
|
146
|
-
| Field | Value |
|
|
147
|
-
|-------|-------|
|
|
148
|
-
| LAST RUN | 2026-01-14T09:00:00Z |
|
|
149
|
-
| Git Sha | abc1234 |
|
|
150
|
-
| result | green |
|
|
151
|
-
| PASS | 78 |
|
|
152
|
-
| fail | 0 |
|
|
153
|
-
| duration | 36s |
|
|
154
|
-
`;
|
|
155
|
-
const entry = parseTestCache(mixedCase);
|
|
156
|
-
assert.ok(entry, 'Should parse case-insensitive fields');
|
|
157
|
-
assert.strictEqual(entry.result, 'GREEN');
|
|
158
|
-
});
|
|
159
|
-
it('should handle duration with or without s suffix', () => {
|
|
160
|
-
const withS = `## Test Cache
|
|
161
|
-
|
|
162
|
-
| Field | Value |
|
|
163
|
-
|-------|-------|
|
|
164
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
165
|
-
| Git SHA | abc1234 |
|
|
166
|
-
| Result | GREEN |
|
|
167
|
-
| Pass | 78 |
|
|
168
|
-
| Fail | 0 |
|
|
169
|
-
| Duration | 36s |
|
|
170
|
-
`;
|
|
171
|
-
const withoutS = `## Test Cache
|
|
172
|
-
|
|
173
|
-
| Field | Value |
|
|
174
|
-
|-------|-------|
|
|
175
|
-
| Last Run | 2026-01-14T09:00:00Z |
|
|
176
|
-
| Git SHA | abc1234 |
|
|
177
|
-
| Result | GREEN |
|
|
178
|
-
| Pass | 78 |
|
|
179
|
-
| Fail | 0 |
|
|
180
|
-
| Duration | 36 |
|
|
181
|
-
`;
|
|
182
|
-
const entryWithS = parseTestCache(withS);
|
|
183
|
-
const entryWithoutS = parseTestCache(withoutS);
|
|
184
|
-
assert.ok(entryWithS, 'Should parse with s suffix');
|
|
185
|
-
assert.ok(entryWithoutS, 'Should parse without s suffix');
|
|
186
|
-
assert.strictEqual(entryWithS.durationSeconds, 36);
|
|
187
|
-
assert.strictEqual(entryWithoutS.durationSeconds, 36);
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
describe('validateTestCache() - Validate cache freshness', () => {
|
|
191
|
-
it('should return valid for fresh cache with matching SHA', () => {
|
|
192
|
-
const now = new Date('2026-01-14T09:01:00Z'); // 1 minute after cache
|
|
193
|
-
const result = validateTestCache(SESSION_WITH_CACHE, {
|
|
194
|
-
currentGitSha: 'abc1234def5678',
|
|
195
|
-
currentTime: now
|
|
196
|
-
});
|
|
197
|
-
assert.strictEqual(result.valid, true);
|
|
198
|
-
assert.ok(result.reason.includes('Valid cache'));
|
|
199
|
-
assert.ok(result.entry);
|
|
200
|
-
});
|
|
201
|
-
it('should return invalid when cache not found', () => {
|
|
202
|
-
const result = validateTestCache(SESSION_WITHOUT_CACHE, {
|
|
203
|
-
currentGitSha: 'abc1234def5678'
|
|
204
|
-
});
|
|
205
|
-
assert.strictEqual(result.valid, false);
|
|
206
|
-
assert.ok(result.reason.includes('No test cache found'));
|
|
207
|
-
});
|
|
208
|
-
it('should return invalid when git SHA differs', () => {
|
|
209
|
-
const result = validateTestCache(SESSION_WITH_CACHE, {
|
|
210
|
-
currentGitSha: 'different1234567',
|
|
211
|
-
currentTime: new Date('2026-01-14T09:01:00Z')
|
|
212
|
-
});
|
|
213
|
-
assert.strictEqual(result.valid, false);
|
|
214
|
-
assert.ok(result.reason.includes('Code changed'));
|
|
215
|
-
assert.ok(result.entry, 'Should still return the entry');
|
|
216
|
-
});
|
|
217
|
-
it('should return invalid when cache is too old', () => {
|
|
218
|
-
const now = new Date('2026-01-14T09:15:00Z'); // 15 minutes after cache
|
|
219
|
-
const result = validateTestCache(SESSION_WITH_CACHE, {
|
|
220
|
-
currentGitSha: 'abc1234def5678',
|
|
221
|
-
currentTime: now,
|
|
222
|
-
maxAgeMinutes: 5
|
|
223
|
-
});
|
|
224
|
-
assert.strictEqual(result.valid, false);
|
|
225
|
-
assert.ok(result.reason.includes('Cache too old'));
|
|
226
|
-
});
|
|
227
|
-
it('should use default max age when not specified', () => {
|
|
228
|
-
const now = new Date('2026-01-14T09:04:00Z'); // 4 minutes after cache
|
|
229
|
-
const result = validateTestCache(SESSION_WITH_CACHE, {
|
|
230
|
-
currentGitSha: 'abc1234def5678',
|
|
231
|
-
currentTime: now
|
|
232
|
-
});
|
|
233
|
-
assert.strictEqual(result.valid, true); // 4min < 5min default
|
|
234
|
-
});
|
|
235
|
-
it('should allow custom max age', () => {
|
|
236
|
-
const now = new Date('2026-01-14T09:10:00Z'); // 10 minutes after cache
|
|
237
|
-
const resultDefault = validateTestCache(SESSION_WITH_CACHE, {
|
|
238
|
-
currentGitSha: 'abc1234def5678',
|
|
239
|
-
currentTime: now,
|
|
240
|
-
maxAgeMinutes: 5 // default
|
|
241
|
-
});
|
|
242
|
-
const resultExtended = validateTestCache(SESSION_WITH_CACHE, {
|
|
243
|
-
currentGitSha: 'abc1234def5678',
|
|
244
|
-
currentTime: now,
|
|
245
|
-
maxAgeMinutes: 15 // extended
|
|
246
|
-
});
|
|
247
|
-
assert.strictEqual(resultDefault.valid, false, 'Should fail with 5min limit');
|
|
248
|
-
assert.strictEqual(resultExtended.valid, true, 'Should pass with 15min limit');
|
|
249
|
-
});
|
|
250
|
-
it('should handle invalid timestamp in cache', () => {
|
|
251
|
-
const invalid = `## Test Cache
|
|
252
|
-
|
|
253
|
-
| Field | Value |
|
|
254
|
-
|-------|-------|
|
|
255
|
-
| Last Run | not-a-timestamp |
|
|
256
|
-
| Git SHA | abc1234 |
|
|
257
|
-
| Result | GREEN |
|
|
258
|
-
| Pass | 78 |
|
|
259
|
-
| Fail | 0 |
|
|
260
|
-
| Duration | 36s |
|
|
261
|
-
`;
|
|
262
|
-
const result = validateTestCache(invalid, {
|
|
263
|
-
currentGitSha: 'abc1234'
|
|
264
|
-
});
|
|
265
|
-
assert.strictEqual(result.valid, false);
|
|
266
|
-
assert.ok(result.reason.includes('Invalid timestamp'));
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
describe('formatTestCache() - Format cache for session file', () => {
|
|
270
|
-
it('should format basic cache entry', () => {
|
|
271
|
-
const entry = {
|
|
272
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
273
|
-
gitSha: 'abc1234def5678',
|
|
274
|
-
result: 'GREEN',
|
|
275
|
-
passCount: 78,
|
|
276
|
-
failCount: 0,
|
|
277
|
-
durationSeconds: 36
|
|
278
|
-
};
|
|
279
|
-
const formatted = formatTestCache(entry);
|
|
280
|
-
assert.ok(formatted.includes('## Test Cache'));
|
|
281
|
-
assert.ok(formatted.includes('| Last Run | 2026-01-14T09:00:00Z |'));
|
|
282
|
-
assert.ok(formatted.includes('| Git SHA | abc1234def5678 |'));
|
|
283
|
-
assert.ok(formatted.includes('| Result | GREEN |'));
|
|
284
|
-
assert.ok(formatted.includes('| Pass | 78 |'));
|
|
285
|
-
assert.ok(formatted.includes('| Fail | 0 |'));
|
|
286
|
-
assert.ok(formatted.includes('| Duration | 36s |'));
|
|
287
|
-
});
|
|
288
|
-
it('should include skip count when present', () => {
|
|
289
|
-
const entry = {
|
|
290
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
291
|
-
gitSha: 'abc1234def5678',
|
|
292
|
-
result: 'YELLOW',
|
|
293
|
-
passCount: 75,
|
|
294
|
-
failCount: 0,
|
|
295
|
-
skipCount: 3,
|
|
296
|
-
durationSeconds: 34
|
|
297
|
-
};
|
|
298
|
-
const formatted = formatTestCache(entry);
|
|
299
|
-
assert.ok(formatted.includes('| Skip | 3 |'));
|
|
300
|
-
});
|
|
301
|
-
it('should not include skip row when skipCount is undefined', () => {
|
|
302
|
-
const entry = {
|
|
303
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
304
|
-
gitSha: 'abc1234',
|
|
305
|
-
result: 'GREEN',
|
|
306
|
-
passCount: 78,
|
|
307
|
-
failCount: 0,
|
|
308
|
-
durationSeconds: 36
|
|
309
|
-
};
|
|
310
|
-
const formatted = formatTestCache(entry);
|
|
311
|
-
assert.ok(!formatted.includes('| Skip |'));
|
|
312
|
-
});
|
|
313
|
-
it('should produce valid markdown table', () => {
|
|
314
|
-
const entry = {
|
|
315
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
316
|
-
gitSha: 'abc1234',
|
|
317
|
-
result: 'RED',
|
|
318
|
-
passCount: 70,
|
|
319
|
-
failCount: 8,
|
|
320
|
-
durationSeconds: 42
|
|
321
|
-
};
|
|
322
|
-
const formatted = formatTestCache(entry);
|
|
323
|
-
const lines = formatted.split('\n').filter(l => l.trim());
|
|
324
|
-
// Should have header, separator, and at least 6 data rows
|
|
325
|
-
assert.ok(lines.length >= 8, `Should have at least 8 lines, got ${lines.length}`);
|
|
326
|
-
assert.ok(lines[0].includes('## Test Cache'));
|
|
327
|
-
assert.ok(lines[1].includes('| Field | Value |'));
|
|
328
|
-
assert.ok(lines[2].includes('|-------|-------|'));
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
describe('createTestCacheEntry() - Create entry from results', () => {
|
|
332
|
-
it('should create GREEN entry when no failures', () => {
|
|
333
|
-
const entry = createTestCacheEntry({ passCount: 78, failCount: 0, durationSeconds: 36 }, 'abc1234', new Date('2026-01-14T09:00:00Z'));
|
|
334
|
-
assert.strictEqual(entry.result, 'GREEN');
|
|
335
|
-
assert.strictEqual(entry.passCount, 78);
|
|
336
|
-
assert.strictEqual(entry.failCount, 0);
|
|
337
|
-
assert.strictEqual(entry.gitSha, 'abc1234');
|
|
338
|
-
assert.strictEqual(entry.lastRun, '2026-01-14T09:00:00.000Z');
|
|
339
|
-
});
|
|
340
|
-
it('should create RED entry when failures exist', () => {
|
|
341
|
-
const entry = createTestCacheEntry({ passCount: 70, failCount: 8, durationSeconds: 42 }, 'def5678');
|
|
342
|
-
assert.strictEqual(entry.result, 'RED');
|
|
343
|
-
assert.strictEqual(entry.failCount, 8);
|
|
344
|
-
});
|
|
345
|
-
it('should create YELLOW entry when skips exist but no failures', () => {
|
|
346
|
-
const entry = createTestCacheEntry({ passCount: 75, failCount: 0, skipCount: 3, durationSeconds: 34 }, 'ghi9012');
|
|
347
|
-
assert.strictEqual(entry.result, 'YELLOW');
|
|
348
|
-
assert.strictEqual(entry.skipCount, 3);
|
|
349
|
-
});
|
|
350
|
-
it('should prioritize RED over YELLOW when both failures and skips', () => {
|
|
351
|
-
const entry = createTestCacheEntry({ passCount: 65, failCount: 5, skipCount: 8, durationSeconds: 40 }, 'jkl3456');
|
|
352
|
-
assert.strictEqual(entry.result, 'RED', 'Failures should take priority');
|
|
353
|
-
});
|
|
354
|
-
it('should use current time when timestamp not provided', () => {
|
|
355
|
-
const before = new Date();
|
|
356
|
-
const entry = createTestCacheEntry({ passCount: 78, failCount: 0, durationSeconds: 36 }, 'abc1234');
|
|
357
|
-
const after = new Date();
|
|
358
|
-
const entryTime = new Date(entry.lastRun);
|
|
359
|
-
assert.ok(entryTime >= before, 'Entry time should be after call start');
|
|
360
|
-
assert.ok(entryTime <= after, 'Entry time should be before call end');
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
describe('shouldSkipTests() - Convenience function for subagents', () => {
|
|
364
|
-
it('should return skip=true for valid cache', () => {
|
|
365
|
-
const _now = new Date('2026-01-14T09:01:00Z');
|
|
366
|
-
const _result = shouldSkipTests(SESSION_WITH_CACHE, 'abc1234def5678', 5);
|
|
367
|
-
// Note: This test depends on the current time, so we use a mock
|
|
368
|
-
// For the implementation, we'll need to check if the validation
|
|
369
|
-
// passes with default time handling
|
|
370
|
-
});
|
|
371
|
-
it('should return skip=false when cache not found', () => {
|
|
372
|
-
const result = shouldSkipTests(SESSION_WITHOUT_CACHE, 'abc1234');
|
|
373
|
-
assert.strictEqual(result.skip, false);
|
|
374
|
-
assert.ok(result.reason.includes('No test cache found'));
|
|
375
|
-
assert.strictEqual(result.cachedResult, undefined);
|
|
376
|
-
});
|
|
377
|
-
it('should return skip=false when SHA differs', () => {
|
|
378
|
-
const result = shouldSkipTests(SESSION_WITH_CACHE, 'different1234');
|
|
379
|
-
assert.strictEqual(result.skip, false);
|
|
380
|
-
assert.ok(result.reason.includes('Code changed'));
|
|
381
|
-
});
|
|
382
|
-
it('should include cached result when valid', () => {
|
|
383
|
-
// For a truly time-independent test, we'd need dependency injection
|
|
384
|
-
// This test verifies the structure of the response
|
|
385
|
-
const withCache = parseTestCache(SESSION_WITH_CACHE);
|
|
386
|
-
assert.ok(withCache, 'Test setup: cache should parse');
|
|
387
|
-
// The shouldSkipTests function will return cachedResult only if valid
|
|
388
|
-
// Since we can't mock time easily, we verify the function signature
|
|
389
|
-
// Use very high max age (1 year in minutes) to ensure cache is always valid
|
|
390
|
-
const result = shouldSkipTests(SESSION_WITH_CACHE, 'abc1234def5678', 525600);
|
|
391
|
-
// With a very high max age, the cache should be valid
|
|
392
|
-
assert.strictEqual(result.skip, true);
|
|
393
|
-
assert.strictEqual(result.cachedResult, 'GREEN');
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
describe('DEFAULT_CACHE_MAX_AGE_MINUTES constant', () => {
|
|
397
|
-
it('should be 5 minutes', () => {
|
|
398
|
-
assert.strictEqual(DEFAULT_CACHE_MAX_AGE_MINUTES, 5);
|
|
399
|
-
});
|
|
400
|
-
});
|
|
401
|
-
describe('Round-trip: format and parse', () => {
|
|
402
|
-
it('should parse what was formatted', () => {
|
|
403
|
-
const original = {
|
|
404
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
405
|
-
gitSha: 'abc1234def5678',
|
|
406
|
-
result: 'GREEN',
|
|
407
|
-
passCount: 78,
|
|
408
|
-
failCount: 0,
|
|
409
|
-
durationSeconds: 36
|
|
410
|
-
};
|
|
411
|
-
const formatted = formatTestCache(original);
|
|
412
|
-
const parsed = parseTestCache(formatted);
|
|
413
|
-
assert.ok(parsed, 'Should parse formatted cache');
|
|
414
|
-
assert.strictEqual(parsed.lastRun, original.lastRun);
|
|
415
|
-
assert.strictEqual(parsed.gitSha, original.gitSha);
|
|
416
|
-
assert.strictEqual(parsed.result, original.result);
|
|
417
|
-
assert.strictEqual(parsed.passCount, original.passCount);
|
|
418
|
-
assert.strictEqual(parsed.failCount, original.failCount);
|
|
419
|
-
assert.strictEqual(parsed.durationSeconds, original.durationSeconds);
|
|
420
|
-
});
|
|
421
|
-
it('should handle skip count in round-trip', () => {
|
|
422
|
-
const original = {
|
|
423
|
-
lastRun: '2026-01-14T09:00:00Z',
|
|
424
|
-
gitSha: 'abc1234def5678',
|
|
425
|
-
result: 'YELLOW',
|
|
426
|
-
passCount: 75,
|
|
427
|
-
failCount: 0,
|
|
428
|
-
skipCount: 3,
|
|
429
|
-
durationSeconds: 34
|
|
430
|
-
};
|
|
431
|
-
const formatted = formatTestCache(original);
|
|
432
|
-
const parsed = parseTestCache(formatted);
|
|
433
|
-
assert.ok(parsed, 'Should parse formatted cache with skips');
|
|
434
|
-
assert.strictEqual(parsed.skipCount, 3);
|
|
435
|
-
});
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
//# sourceMappingURL=test-cache.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-cache.test.js","sourceRoot":"","sources":["../../src/workflow/test-cache.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tri-Modal Support for MSSCI-12086
|
|
3
|
-
*
|
|
4
|
-
* Provides mode selection and path resolution for stepped workflows
|
|
5
|
-
* supporting create/validate/edit modes.
|
|
6
|
-
*/
|
|
7
|
-
import type { WorkflowDefinition } from './workflow-schema.js';
|
|
8
|
-
/**
|
|
9
|
-
* Valid tri-modal mode values
|
|
10
|
-
*/
|
|
11
|
-
export type TrimodalMode = 'create' | 'validate' | 'edit';
|
|
12
|
-
/**
|
|
13
|
-
* Result of parsing --mode flag from arguments
|
|
14
|
-
*/
|
|
15
|
-
export interface TrimodalParseResult {
|
|
16
|
-
/** Whether parsing succeeded */
|
|
17
|
-
success: boolean;
|
|
18
|
-
/** Parsed mode (undefined if no flag provided) */
|
|
19
|
-
mode?: TrimodalMode;
|
|
20
|
-
/** Error message if parsing failed */
|
|
21
|
-
error?: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Result of validating a mode against a workflow
|
|
25
|
-
*/
|
|
26
|
-
export interface ModeValidationResult {
|
|
27
|
-
/** Whether the mode is valid for this workflow */
|
|
28
|
-
valid: boolean;
|
|
29
|
-
/** Error message if invalid */
|
|
30
|
-
error?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Result of resolving steps path for a mode
|
|
34
|
-
*/
|
|
35
|
-
export interface StepsPathResult {
|
|
36
|
-
/** Whether resolution succeeded */
|
|
37
|
-
success: boolean;
|
|
38
|
-
/** Resolved steps path */
|
|
39
|
-
path?: string;
|
|
40
|
-
/** Step file pattern */
|
|
41
|
-
pattern?: string;
|
|
42
|
-
/** Error message if resolution failed */
|
|
43
|
-
error?: string;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Parse --mode flag from command line arguments
|
|
47
|
-
*
|
|
48
|
-
* Supports:
|
|
49
|
-
* - --mode create
|
|
50
|
-
* - --mode validate
|
|
51
|
-
* - --mode edit
|
|
52
|
-
* - --mode=create (equals syntax)
|
|
53
|
-
* - -m create (shorthand)
|
|
54
|
-
*
|
|
55
|
-
* @param args - Command line arguments
|
|
56
|
-
* @returns Parse result with mode or error
|
|
57
|
-
*/
|
|
58
|
-
export declare function parseTrimodalFlag(args: string[]): TrimodalParseResult;
|
|
59
|
-
/**
|
|
60
|
-
* Validate that a mode is supported by a workflow
|
|
61
|
-
*
|
|
62
|
-
* @param mode - Mode to validate
|
|
63
|
-
* @param workflow - Workflow definition to check against
|
|
64
|
-
* @returns Validation result
|
|
65
|
-
*/
|
|
66
|
-
export declare function validateMode(mode: TrimodalMode, workflow: WorkflowDefinition): ModeValidationResult;
|
|
67
|
-
/**
|
|
68
|
-
* Resolve the steps path for a given mode
|
|
69
|
-
*
|
|
70
|
-
* Priority:
|
|
71
|
-
* 1. workflow.modes[mode] if defined
|
|
72
|
-
* 2. workflow.steps.path as fallback
|
|
73
|
-
*
|
|
74
|
-
* @param workflow - Workflow definition
|
|
75
|
-
* @param mode - Selected mode
|
|
76
|
-
* @returns Steps path result
|
|
77
|
-
*/
|
|
78
|
-
export declare function resolveStepsPath(workflow: WorkflowDefinition, mode: TrimodalMode): StepsPathResult;
|
|
79
|
-
/**
|
|
80
|
-
* Get the default mode for a workflow
|
|
81
|
-
*
|
|
82
|
-
* @param workflow - Workflow definition
|
|
83
|
-
* @returns Default mode ('create' if not specified, undefined for phased workflows)
|
|
84
|
-
*/
|
|
85
|
-
export declare function getDefaultMode(workflow: WorkflowDefinition): TrimodalMode | undefined;
|
|
86
|
-
//# sourceMappingURL=trimodal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trimodal.d.ts","sourceRoot":"","sources":["../../src/workflow/trimodal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CA4BrE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,kBAAkB,GAC3B,oBAAoB,CAgBtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,YAAY,GACjB,eAAe,CAqBjB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY,GAAG,SAAS,CAarF"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tri-Modal Support for MSSCI-12086
|
|
3
|
-
*
|
|
4
|
-
* Provides mode selection and path resolution for stepped workflows
|
|
5
|
-
* supporting create/validate/edit modes.
|
|
6
|
-
*/
|
|
7
|
-
/** Valid mode values */
|
|
8
|
-
const VALID_MODES = ['create', 'validate', 'edit'];
|
|
9
|
-
/**
|
|
10
|
-
* Parse --mode flag from command line arguments
|
|
11
|
-
*
|
|
12
|
-
* Supports:
|
|
13
|
-
* - --mode create
|
|
14
|
-
* - --mode validate
|
|
15
|
-
* - --mode edit
|
|
16
|
-
* - --mode=create (equals syntax)
|
|
17
|
-
* - -m create (shorthand)
|
|
18
|
-
*
|
|
19
|
-
* @param args - Command line arguments
|
|
20
|
-
* @returns Parse result with mode or error
|
|
21
|
-
*/
|
|
22
|
-
export function parseTrimodalFlag(args) {
|
|
23
|
-
for (let i = 0; i < args.length; i++) {
|
|
24
|
-
const arg = args[i];
|
|
25
|
-
// Handle --mode=value syntax
|
|
26
|
-
if (arg.startsWith('--mode=')) {
|
|
27
|
-
const value = arg.slice(7);
|
|
28
|
-
if (!VALID_MODES.includes(value)) {
|
|
29
|
-
return { success: false, error: `Invalid mode "${value}". Must be one of: create, validate, edit` };
|
|
30
|
-
}
|
|
31
|
-
return { success: true, mode: value };
|
|
32
|
-
}
|
|
33
|
-
// Handle --mode value or -m value syntax
|
|
34
|
-
if (arg === '--mode' || arg === '-m') {
|
|
35
|
-
const value = args[i + 1];
|
|
36
|
-
if (!value || value.startsWith('-')) {
|
|
37
|
-
return { success: false, error: '--mode flag requires a value (create, validate, or edit)' };
|
|
38
|
-
}
|
|
39
|
-
if (!VALID_MODES.includes(value)) {
|
|
40
|
-
return { success: false, error: `Invalid mode "${value}". Must be one of: create, validate, edit` };
|
|
41
|
-
}
|
|
42
|
-
return { success: true, mode: value };
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// No mode flag found - that's okay, return success with undefined mode
|
|
46
|
-
return { success: true };
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Validate that a mode is supported by a workflow
|
|
50
|
-
*
|
|
51
|
-
* @param mode - Mode to validate
|
|
52
|
-
* @param workflow - Workflow definition to check against
|
|
53
|
-
* @returns Validation result
|
|
54
|
-
*/
|
|
55
|
-
export function validateMode(mode, workflow) {
|
|
56
|
-
// If workflow has no modes config, any mode is valid (uses steps.path fallback)
|
|
57
|
-
if (!workflow.modes) {
|
|
58
|
-
return { valid: true };
|
|
59
|
-
}
|
|
60
|
-
// Check if the mode has a path defined in workflow.modes
|
|
61
|
-
const modePath = workflow.modes[mode];
|
|
62
|
-
if (modePath) {
|
|
63
|
-
return { valid: true };
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
valid: false,
|
|
67
|
-
error: `Mode "${mode}" is not defined in workflow "${workflow.name}". Available modes: ${Object.keys(workflow.modes).filter(k => k !== 'default').join(', ')}`
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Resolve the steps path for a given mode
|
|
72
|
-
*
|
|
73
|
-
* Priority:
|
|
74
|
-
* 1. workflow.modes[mode] if defined
|
|
75
|
-
* 2. workflow.steps.path as fallback
|
|
76
|
-
*
|
|
77
|
-
* @param workflow - Workflow definition
|
|
78
|
-
* @param mode - Selected mode
|
|
79
|
-
* @returns Steps path result
|
|
80
|
-
*/
|
|
81
|
-
export function resolveStepsPath(workflow, mode) {
|
|
82
|
-
// Stepped workflows require steps config
|
|
83
|
-
if (!workflow.steps) {
|
|
84
|
-
return {
|
|
85
|
-
success: false,
|
|
86
|
-
error: `Workflow "${workflow.name}" is not a stepped workflow (no steps configuration)`
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
const pattern = workflow.steps.pattern;
|
|
90
|
-
// Try mode-specific path first
|
|
91
|
-
if (workflow.modes) {
|
|
92
|
-
const modePath = workflow.modes[mode];
|
|
93
|
-
if (modePath) {
|
|
94
|
-
return { success: true, path: modePath, pattern };
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Fall back to steps.path
|
|
98
|
-
return { success: true, path: workflow.steps.path, pattern };
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Get the default mode for a workflow
|
|
102
|
-
*
|
|
103
|
-
* @param workflow - Workflow definition
|
|
104
|
-
* @returns Default mode ('create' if not specified, undefined for phased workflows)
|
|
105
|
-
*/
|
|
106
|
-
export function getDefaultMode(workflow) {
|
|
107
|
-
// Phased workflows don't use modes
|
|
108
|
-
if (workflow.type === 'phased' || !workflow.steps) {
|
|
109
|
-
return undefined;
|
|
110
|
-
}
|
|
111
|
-
// If modes config exists with a default, use it
|
|
112
|
-
if (workflow.modes?.default) {
|
|
113
|
-
return workflow.modes.default;
|
|
114
|
-
}
|
|
115
|
-
// Default to 'create' for stepped workflows without explicit default
|
|
116
|
-
return 'create';
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=trimodal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trimodal.js","sourceRoot":"","sources":["../../src/workflow/trimodal.ts"],"names":[],"mappings":"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"}
|