@pennyfarthing/core 7.0.1 → 7.4.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/{packages/core/dist → dist}/cli/commands/cyclist.d.ts +2 -2
- package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/cyclist.js +8 -9
- package/dist/cli/commands/cyclist.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/cyclist.test.js +6 -4
- package/dist/cli/commands/cyclist.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/commands/update.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/commands/update.js +9 -136
- package/dist/cli/commands/update.js.map +1 -0
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js +4 -3
- package/{packages/core/dist → dist}/cli/cyclist-migration.test.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/constants.d.ts +7 -1
- package/dist/cli/utils/constants.d.ts.map +1 -0
- package/{packages/core/dist → dist}/cli/utils/constants.js +4 -2
- package/{packages/core/dist → dist}/cli/utils/constants.js.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts +1 -4
- package/{packages/core/dist → dist}/cli/utils/themes.d.ts.map +1 -1
- package/{packages/core/dist → dist}/cli/utils/themes.js +2 -22
- package/dist/cli/utils/themes.js.map +1 -0
- package/dist/cli/utils/themes.test.d.ts +12 -0
- package/{packages/core/dist → dist}/cli/utils/themes.test.js +16 -13
- package/dist/cli/utils/themes.test.js.map +1 -0
- package/{packages/core/dist → dist}/cli/workspace.test.js +5 -8
- package/{packages/core/dist → dist}/cli/workspace.test.js.map +1 -1
- package/{packages/core/dist → dist}/index.d.ts +1 -0
- package/{packages/core/dist → dist}/index.d.ts.map +1 -1
- package/{packages/core/dist → dist}/index.js +10 -0
- package/{packages/core/dist → dist}/index.js.map +1 -1
- package/dist/jira/jira-epic-creation.d.ts +109 -0
- package/dist/jira/jira-epic-creation.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.js +253 -0
- package/dist/jira/jira-epic-creation.js.map +1 -0
- package/dist/jira/jira-epic-creation.test.d.ts +16 -0
- package/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
- package/dist/jira/jira-epic-creation.test.js +387 -0
- package/dist/jira/jira-epic-creation.test.js.map +1 -0
- package/dist/jira/jira-sprint-sync.d.ts +247 -0
- package/dist/jira/jira-sprint-sync.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.js +670 -0
- package/dist/jira/jira-sprint-sync.js.map +1 -0
- package/dist/jira/jira-sprint-sync.test.d.ts +16 -0
- package/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
- package/dist/jira/jira-sprint-sync.test.js +845 -0
- package/dist/jira/jira-sprint-sync.test.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts +11 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.d.ts.map +1 -1
- package/{packages/core/dist → dist}/scripts/generate-spider.js +24 -1
- package/dist/scripts/generate-spider.js.map +1 -0
- package/{packages/core/dist → dist}/scripts/generate-spider.test.js +6 -4
- package/dist/scripts/generate-spider.test.js.map +1 -0
- package/dist/workflow/gate-handler.d.ts +94 -0
- package/dist/workflow/gate-handler.d.ts.map +1 -0
- package/dist/workflow/gate-handler.js +189 -0
- package/dist/workflow/gate-handler.js.map +1 -0
- package/dist/workflow/gate-handler.test.d.ts +14 -0
- package/dist/workflow/gate-handler.test.d.ts.map +1 -0
- package/dist/workflow/gate-handler.test.js +543 -0
- package/dist/workflow/gate-handler.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts +46 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.js +53 -0
- package/{packages/core/dist → dist}/workflow/generic-handoff.js.map +1 -1
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js +2 -2
- package/{packages/core/dist → dist}/workflow/generic-handoff.test.js.map +1 -1
- package/dist/workflow/index.d.ts +16 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +24 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/session-state.d.ts +92 -0
- package/dist/workflow/session-state.d.ts.map +1 -0
- package/dist/workflow/session-state.js +198 -0
- package/dist/workflow/session-state.js.map +1 -0
- package/dist/workflow/session-state.test.d.ts +8 -0
- package/dist/workflow/session-state.test.d.ts.map +1 -0
- package/dist/workflow/session-state.test.js +551 -0
- package/dist/workflow/session-state.test.js.map +1 -0
- package/dist/workflow/step-parser.d.ts +45 -0
- package/dist/workflow/step-parser.d.ts.map +1 -0
- package/dist/workflow/step-parser.js +147 -0
- package/dist/workflow/step-parser.js.map +1 -0
- package/dist/workflow/step-parser.test.d.ts +14 -0
- package/dist/workflow/step-parser.test.d.ts.map +1 -0
- package/dist/workflow/step-parser.test.js +470 -0
- package/dist/workflow/step-parser.test.js.map +1 -0
- package/dist/workflow/trimodal.d.ts +86 -0
- package/dist/workflow/trimodal.d.ts.map +1 -0
- package/dist/workflow/trimodal.js +118 -0
- package/dist/workflow/trimodal.js.map +1 -0
- package/dist/workflow/trimodal.test.d.ts +11 -0
- package/dist/workflow/trimodal.test.d.ts.map +1 -0
- package/dist/workflow/trimodal.test.js +395 -0
- package/dist/workflow/trimodal.test.js.map +1 -0
- package/dist/workflow/variable-resolver.d.ts +67 -0
- package/dist/workflow/variable-resolver.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.js +156 -0
- package/dist/workflow/variable-resolver.js.map +1 -0
- package/dist/workflow/variable-resolver.test.d.ts +14 -0
- package/dist/workflow/variable-resolver.test.d.ts.map +1 -0
- package/dist/workflow/variable-resolver.test.js +400 -0
- package/dist/workflow/variable-resolver.test.js.map +1 -0
- package/dist/workflow/workflow-executor.d.ts +163 -0
- package/dist/workflow/workflow-executor.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.js +197 -0
- package/dist/workflow/workflow-executor.js.map +1 -0
- package/dist/workflow/workflow-executor.test.d.ts +8 -0
- package/dist/workflow/workflow-executor.test.d.ts.map +1 -0
- package/dist/workflow/workflow-executor.test.js +444 -0
- package/dist/workflow/workflow-executor.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-loader.test.js +5 -5
- package/dist/workflow/workflow-loader.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js +8 -9
- package/{packages/core/dist → dist}/workflow/workflow-migration.test.js.map +1 -1
- package/dist/workflow/workflow-permissions.d.ts +55 -0
- package/dist/workflow/workflow-permissions.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.js +64 -0
- package/dist/workflow/workflow-permissions.js.map +1 -0
- package/dist/workflow/workflow-permissions.test.d.ts +15 -0
- package/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
- package/dist/workflow/workflow-permissions.test.js +301 -0
- package/dist/workflow/workflow-permissions.test.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.d.ts +61 -2
- package/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/dist/workflow/workflow-schema.js +454 -0
- package/dist/workflow/workflow-schema.js.map +1 -0
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js +6 -6
- package/{packages/core/dist → dist}/workflow/workflow-schema.test.js.map +1 -1
- package/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
- package/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
- package/dist/workflow/workflow-stepped-schema.test.js +608 -0
- package/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
- package/package.json +36 -31
- package/README.md +0 -301
- package/packages/core/dist/cli/commands/cyclist.js.map +0 -1
- package/packages/core/dist/cli/commands/cyclist.test.js.map +0 -1
- package/packages/core/dist/cli/commands/update.js.map +0 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +0 -1
- package/packages/core/dist/cli/utils/themes.js.map +0 -1
- package/packages/core/dist/cli/utils/themes.test.d.ts +0 -12
- package/packages/core/dist/cli/utils/themes.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.js +0 -256
- package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
- package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.d.ts +0 -52
- package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.js +0 -199
- package/packages/core/dist/scripts/generate-face.js.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/generate-face.test.js +0 -301
- package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
- package/packages/core/dist/scripts/generate-spider.js.map +0 -1
- package/packages/core/dist/scripts/generate-spider.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-loader.test.js.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +0 -1
- package/packages/core/dist/workflow/workflow-schema.js +0 -230
- package/packages/core/dist/workflow/workflow-schema.js.map +0 -1
- package/pennyfarthing-dist/agents/README.md +0 -397
- package/pennyfarthing-dist/agents/architect.md +0 -171
- package/pennyfarthing-dist/agents/dev.md +0 -225
- package/pennyfarthing-dist/agents/devops.md +0 -183
- package/pennyfarthing-dist/agents/generic-handoff.md +0 -451
- package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
- package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
- package/pennyfarthing-dist/agents/orchestrator.md +0 -316
- package/pennyfarthing-dist/agents/pm.md +0 -153
- package/pennyfarthing-dist/agents/reviewer-preflight.md +0 -224
- package/pennyfarthing-dist/agents/reviewer.md +0 -315
- package/pennyfarthing-dist/agents/sm-file-summary.md +0 -109
- package/pennyfarthing-dist/agents/sm-handoff.md +0 -97
- package/pennyfarthing-dist/agents/sm.md +0 -480
- package/pennyfarthing-dist/agents/tea.md +0 -191
- package/pennyfarthing-dist/agents/tech-writer.md +0 -148
- package/pennyfarthing-dist/agents/testing-runner.md +0 -420
- package/pennyfarthing-dist/agents/ux-designer.md +0 -158
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -332
- package/pennyfarthing-dist/commands/architect.md +0 -62
- package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
- package/pennyfarthing-dist/commands/benchmark.md +0 -467
- package/pennyfarthing-dist/commands/brainstorm.md +0 -91
- package/pennyfarthing-dist/commands/check.md +0 -156
- package/pennyfarthing-dist/commands/chore.md +0 -178
- package/pennyfarthing-dist/commands/close-epic.md +0 -136
- package/pennyfarthing-dist/commands/continue-session.md +0 -184
- package/pennyfarthing-dist/commands/create-branches-from-story.md +0 -374
- package/pennyfarthing-dist/commands/create-theme.md +0 -29
- package/pennyfarthing-dist/commands/dev.md +0 -60
- package/pennyfarthing-dist/commands/devops.md +0 -59
- package/pennyfarthing-dist/commands/git-cleanup.md +0 -340
- package/pennyfarthing-dist/commands/health-check.md +0 -108
- package/pennyfarthing-dist/commands/help.md +0 -264
- package/pennyfarthing-dist/commands/job-fair.md +0 -102
- package/pennyfarthing-dist/commands/list-themes.md +0 -17
- package/pennyfarthing-dist/commands/new-work.md +0 -127
- package/pennyfarthing-dist/commands/orchestrator.md +0 -56
- package/pennyfarthing-dist/commands/parallel-work.md +0 -71
- package/pennyfarthing-dist/commands/party-mode.md +0 -67
- package/pennyfarthing-dist/commands/permissions.md +0 -193
- package/pennyfarthing-dist/commands/pm.md +0 -60
- package/pennyfarthing-dist/commands/prime.md +0 -140
- package/pennyfarthing-dist/commands/release.md +0 -58
- package/pennyfarthing-dist/commands/repo-status.md +0 -49
- package/pennyfarthing-dist/commands/retro.md +0 -200
- package/pennyfarthing-dist/commands/reviewer.md +0 -64
- package/pennyfarthing-dist/commands/run-ci.md +0 -116
- package/pennyfarthing-dist/commands/set-theme.md +0 -52
- package/pennyfarthing-dist/commands/show-theme.md +0 -21
- package/pennyfarthing-dist/commands/sm.md +0 -70
- package/pennyfarthing-dist/commands/solo.md +0 -411
- package/pennyfarthing-dist/commands/sprint-planning.md +0 -109
- package/pennyfarthing-dist/commands/start-epic.md +0 -156
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +0 -184
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +0 -376
- package/pennyfarthing-dist/commands/tea.md +0 -63
- package/pennyfarthing-dist/commands/tech-writer.md +0 -53
- package/pennyfarthing-dist/commands/theme-maker.md +0 -671
- package/pennyfarthing-dist/commands/update-domain-docs.md +0 -83
- package/pennyfarthing-dist/commands/ux-designer.md +0 -62
- package/pennyfarthing-dist/commands/work.md +0 -111
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +0 -480
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
- package/pennyfarthing-dist/guides/HOOKS.md +0 -230
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +0 -338
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +0 -193
- package/pennyfarthing-dist/guides/agent-template-strategic.md +0 -148
- package/pennyfarthing-dist/guides/agent-template-tactical.md +0 -162
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +0 -746
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +0 -574
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +0 -488
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +0 -402
- package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
- package/pennyfarthing-dist/guides/persona-loading.md +0 -46
- package/pennyfarthing-dist/guides/persona-system.md +0 -294
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
- package/pennyfarthing-dist/guides/shared-context.md +0 -147
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
- package/pennyfarthing-dist/guides/workflow-schema.md +0 -195
- package/pennyfarthing-dist/guides/worktree-mode.md +0 -113
- package/pennyfarthing-dist/output-styles/teaching.md +0 -33
- package/pennyfarthing-dist/output-styles/terse.md +0 -20
- package/pennyfarthing-dist/output-styles/verbose.md +0 -28
- package/pennyfarthing-dist/personas/themes/1984.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -207
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -295
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -327
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -316
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -310
- package/pennyfarthing-dist/personas/themes/control.yaml +0 -197
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -323
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -332
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/dune.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -312
- package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -328
- package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -290
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -243
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -324
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -331
- package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -321
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -287
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/justified.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -219
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -299
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -355
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/mash.yaml +0 -334
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -306
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -329
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -242
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -298
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -220
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/rome.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -318
- package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -301
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -289
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -288
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -230
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -210
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -303
- package/pennyfarthing-dist/personas/themes/succession.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -208
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -236
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -213
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -322
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -353
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -330
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -308
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -311
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -302
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -300
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -291
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -320
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -307
- package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -302
- package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -264
- package/pennyfarthing-dist/scripts/agent-session.sh +0 -367
- package/pennyfarthing-dist/scripts/check-context.sh +0 -187
- package/pennyfarthing-dist/scripts/check.sh +0 -497
- package/pennyfarthing-dist/scripts/deploy.sh +0 -284
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -395
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -61
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -66
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -35
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -166
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -50
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -71
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -54
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -98
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -59
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -91
- package/pennyfarthing-dist/scripts/prime.sh +0 -161
- package/pennyfarthing-dist/scripts/release.sh +0 -198
- package/pennyfarthing-dist/scripts/repo-utils.sh +0 -778
- package/pennyfarthing-dist/scripts/run-ci.sh +0 -219
- package/pennyfarthing-dist/scripts/run.sh +0 -65
- package/pennyfarthing-dist/scripts/statusline.sh +0 -264
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -582
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -107
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -597
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -514
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -517
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -331
- package/pennyfarthing-dist/scripts/uninstall.sh +0 -271
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -177
- package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -251
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -136
- package/pennyfarthing-dist/scripts/utils/common.sh +0 -157
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -230
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -269
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -231
- package/pennyfarthing-dist/scripts/utils/find-root.sh +0 -33
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -110
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -127
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +0 -289
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -443
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -208
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -198
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -162
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -463
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -8
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -74
- package/pennyfarthing-dist/scripts/utils/logging.sh +0 -186
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -141
- package/pennyfarthing-dist/scripts/utils/retry.sh +0 -76
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -7
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -319
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -193
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -286
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -241
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -400
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -16
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -337
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -160
- package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -498
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +0 -236
- package/pennyfarthing-dist/skills/changelog/SKILL.md +0 -367
- package/pennyfarthing-dist/skills/code-review/SKILL.md +0 -168
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +0 -268
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +0 -117
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +0 -421
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -258
- package/pennyfarthing-dist/skills/jira/SKILL.md +0 -281
- package/pennyfarthing-dist/skills/judge/SKILL.md +0 -524
- package/pennyfarthing-dist/skills/just/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +0 -240
- package/pennyfarthing-dist/skills/otel/skill.md +0 -222
- package/pennyfarthing-dist/skills/permissions/skill.md +0 -172
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -173
- package/pennyfarthing-dist/skills/skill-registry.schema.json +0 -102
- package/pennyfarthing-dist/skills/skill-registry.yaml +0 -335
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
- package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
- package/pennyfarthing-dist/skills/testing/SKILL.md +0 -99
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +0 -124
- package/pennyfarthing-dist/skills/theme/skill.md +0 -129
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +0 -169
- package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
- package/pennyfarthing-dist/skills/yq/SKILL.md +0 -264
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +0 -187
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +0 -59
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -276
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +0 -61
- package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
- package/pennyfarthing-dist/templates/preferences.yaml.template +0 -15
- package/pennyfarthing-dist/templates/settings.local.json.template +0 -90
- package/pennyfarthing-dist/templates/setup-env.sh.template +0 -18
- package/pennyfarthing-dist/templates/shared-context.md.template +0 -70
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +0 -40
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +0 -37
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +0 -34
- package/pennyfarthing-dist/workflows/agent-docs.yaml +0 -70
- package/pennyfarthing-dist/workflows/bdd.yaml +0 -58
- package/pennyfarthing-dist/workflows/tdd.yaml +0 -50
- package/pennyfarthing-dist/workflows/trivial.yaml +0 -40
- /package/{packages/core/bin → bin}/pennyfarthing.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/context-reader.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/epics-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js +0 -0
- /package/{packages/core/dist → dist}/bmad/index.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/status-sync.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-exporter.test.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.js.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js +0 -0
- /package/{packages/core/dist → dist}/bmad/story-parser.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/command.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/doctor.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/init.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/skill.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/theme.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/uninstall.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/update.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/commands/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/customization.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/index.js +0 -0
- /package/{packages/core/dist → dist}/cli/index.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js +0 -0
- /package/{packages/core/dist → dist}/cli/theme-maker.test.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/files.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/logger.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/manifest.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/node-modules.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/prompts.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/symlinks.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/themes.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js +0 -0
- /package/{packages/core/dist → dist}/cli/utils/version.js.map +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/cli/workspace.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/index.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js +0 -0
- /package/{packages/core/dist → dist}/permissions/index.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.js.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js +0 -0
- /package/{packages/core/dist → dist}/permissions/permission-schema.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/run-ci.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js +0 -0
- /package/{packages/core/dist → dist}/scripts/theme-detail.test.js.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js +0 -0
- /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js +0 -0
- /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/test-cache.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-router.test.js.map +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts +0 -0
- /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts.map +0 -0
|
@@ -1,597 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# test-drift-detection.sh - Tests for story 8-2: Startup Drift Detection
|
|
3
|
-
# Verifies that workflow-status-check detects and reports drift between
|
|
4
|
-
# merged branches and sprint YAML status
|
|
5
|
-
#
|
|
6
|
-
# RED STATE: These tests will FAIL until Dev implements the feature
|
|
7
|
-
|
|
8
|
-
set -uo pipefail
|
|
9
|
-
|
|
10
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
11
|
-
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
|
|
12
|
-
|
|
13
|
-
# Colors for output
|
|
14
|
-
RED='\033[0;31m'
|
|
15
|
-
GREEN='\033[0;32m'
|
|
16
|
-
YELLOW='\033[1;33m'
|
|
17
|
-
NC='\033[0m'
|
|
18
|
-
|
|
19
|
-
TESTS_RUN=0
|
|
20
|
-
TESTS_PASSED=0
|
|
21
|
-
TESTS_FAILED=0
|
|
22
|
-
|
|
23
|
-
pass() {
|
|
24
|
-
echo -e "${GREEN}PASS${NC}: $1"
|
|
25
|
-
((TESTS_PASSED++))
|
|
26
|
-
((TESTS_RUN++))
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
fail() {
|
|
30
|
-
echo -e "${RED}FAIL${NC}: $1"
|
|
31
|
-
echo " Expected: $2"
|
|
32
|
-
echo " Got: $3"
|
|
33
|
-
((TESTS_FAILED++))
|
|
34
|
-
((TESTS_RUN++))
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
echo "=== Story 8-2: Startup Drift Detection ==="
|
|
38
|
-
echo ""
|
|
39
|
-
|
|
40
|
-
# ==============================================================================
|
|
41
|
-
# AC1: workflow-status-check detects merged-but-not-closed stories
|
|
42
|
-
# ==============================================================================
|
|
43
|
-
|
|
44
|
-
echo "--- AC1: Detects merged-but-not-closed stories ---"
|
|
45
|
-
echo ""
|
|
46
|
-
|
|
47
|
-
# Test: detect_drift function exists in sprint-common.sh
|
|
48
|
-
test_detect_drift_function_exists() {
|
|
49
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
50
|
-
|
|
51
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
52
|
-
fail "detect_drift function exists" "file exists" "sprint-common.sh not found"
|
|
53
|
-
return
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
if grep -q "detect_drift" "$sprint_common" 2>/dev/null; then
|
|
57
|
-
pass "detect_drift function exists in sprint-common.sh"
|
|
58
|
-
else
|
|
59
|
-
fail "detect_drift function exists" \
|
|
60
|
-
"detect_drift function in sprint-common.sh" \
|
|
61
|
-
"function not found"
|
|
62
|
-
fi
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# Test: detect_drift scans git merge log
|
|
66
|
-
test_detect_drift_uses_git_log() {
|
|
67
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
68
|
-
|
|
69
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
70
|
-
fail "detect_drift uses git log" "file exists" "sprint-common.sh not found"
|
|
71
|
-
return
|
|
72
|
-
fi
|
|
73
|
-
|
|
74
|
-
# Check if detect_drift uses git log --merges
|
|
75
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -q "git log.*merges\|git log --merges"; then
|
|
76
|
-
pass "detect_drift scans git merge log"
|
|
77
|
-
else
|
|
78
|
-
fail "detect_drift uses git log" \
|
|
79
|
-
"git log --merges command in detect_drift" \
|
|
80
|
-
"git log --merges not found in function"
|
|
81
|
-
fi
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
# Test: detect_drift calls get_story_field to check YAML status
|
|
85
|
-
test_detect_drift_checks_yaml() {
|
|
86
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
87
|
-
|
|
88
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
89
|
-
fail "detect_drift checks YAML status" "file exists" "sprint-common.sh not found"
|
|
90
|
-
return
|
|
91
|
-
fi
|
|
92
|
-
|
|
93
|
-
# Check if detect_drift uses get_story_field
|
|
94
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -q "get_story_field"; then
|
|
95
|
-
pass "detect_drift checks YAML status via get_story_field"
|
|
96
|
-
else
|
|
97
|
-
fail "detect_drift checks YAML status" \
|
|
98
|
-
"get_story_field call in detect_drift" \
|
|
99
|
-
"get_story_field not found in function"
|
|
100
|
-
fi
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
# Test: detect_drift uses extract_story_id to parse branch names
|
|
104
|
-
test_detect_drift_uses_extract() {
|
|
105
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
106
|
-
|
|
107
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
108
|
-
fail "detect_drift uses extract_story_id" "file exists" "sprint-common.sh not found"
|
|
109
|
-
return
|
|
110
|
-
fi
|
|
111
|
-
|
|
112
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -q "extract_story_id"; then
|
|
113
|
-
pass "detect_drift uses extract_story_id to parse branches"
|
|
114
|
-
else
|
|
115
|
-
fail "detect_drift uses extract_story_id" \
|
|
116
|
-
"extract_story_id call in detect_drift" \
|
|
117
|
-
"extract_story_id not found in function"
|
|
118
|
-
fi
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
# Test: detect_drift returns empty when no drift exists
|
|
122
|
-
test_detect_drift_no_drift() {
|
|
123
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
124
|
-
|
|
125
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
126
|
-
fail "detect_drift returns empty when no drift" "file exists" "sprint-common.sh not found"
|
|
127
|
-
return
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
# Source and call detect_drift - should return empty in a clean state
|
|
131
|
-
# (no merged branches that don't match YAML status)
|
|
132
|
-
(
|
|
133
|
-
source "$sprint_common" 2>/dev/null || true
|
|
134
|
-
|
|
135
|
-
if type detect_drift &>/dev/null; then
|
|
136
|
-
result=$(detect_drift 2>/dev/null || echo "")
|
|
137
|
-
# Empty result means no drift detected (which is correct for clean state)
|
|
138
|
-
if [[ -z "$result" || "$result" == "" ]]; then
|
|
139
|
-
echo "PASS"
|
|
140
|
-
else
|
|
141
|
-
echo "RESULT:$result"
|
|
142
|
-
fi
|
|
143
|
-
else
|
|
144
|
-
echo "FAIL:function not found"
|
|
145
|
-
fi
|
|
146
|
-
) | {
|
|
147
|
-
read -r output
|
|
148
|
-
if [[ "$output" == "PASS" ]]; then
|
|
149
|
-
pass "detect_drift returns empty when no drift exists"
|
|
150
|
-
elif [[ "$output" == RESULT:* ]]; then
|
|
151
|
-
# Result might be valid - drifted stories found
|
|
152
|
-
pass "detect_drift returns result (found drifted stories or empty)"
|
|
153
|
-
else
|
|
154
|
-
local got="${output#FAIL:}"
|
|
155
|
-
fail "detect_drift returns empty when no drift" \
|
|
156
|
-
"empty string or drifted stories" \
|
|
157
|
-
"${got:-function missing}"
|
|
158
|
-
fi
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
# Test: detect_drift identifies story that is merged but marked in_progress
|
|
163
|
-
test_detect_drift_finds_in_progress() {
|
|
164
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
165
|
-
|
|
166
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
167
|
-
fail "detect_drift finds in_progress drift" "file exists" "sprint-common.sh not found"
|
|
168
|
-
return
|
|
169
|
-
fi
|
|
170
|
-
|
|
171
|
-
# Check function structure - it should compare status against "done" and "backlog"
|
|
172
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE 'done|in_progress|status'; then
|
|
173
|
-
pass "detect_drift checks for non-done/non-backlog statuses"
|
|
174
|
-
else
|
|
175
|
-
fail "detect_drift finds in_progress drift" \
|
|
176
|
-
"status comparison in detect_drift" \
|
|
177
|
-
"status checks not found in function"
|
|
178
|
-
fi
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
# Test: detect_drift ignores stories already marked done
|
|
182
|
-
test_detect_drift_ignores_done() {
|
|
183
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
184
|
-
|
|
185
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
186
|
-
fail "detect_drift ignores done stories" "file exists" "sprint-common.sh not found"
|
|
187
|
-
return
|
|
188
|
-
fi
|
|
189
|
-
|
|
190
|
-
# Check that function filters out "done" status
|
|
191
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE '!= "done"|!= done|-ne done'; then
|
|
192
|
-
pass "detect_drift filters out stories with done status"
|
|
193
|
-
else
|
|
194
|
-
fail "detect_drift ignores done stories" \
|
|
195
|
-
"check for status != done in function" \
|
|
196
|
-
"done filter not found"
|
|
197
|
-
fi
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
# Test: detect_drift ignores stories marked backlog (not drift - never started)
|
|
201
|
-
test_detect_drift_ignores_backlog() {
|
|
202
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
203
|
-
|
|
204
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
205
|
-
fail "detect_drift ignores backlog stories" "file exists" "sprint-common.sh not found"
|
|
206
|
-
return
|
|
207
|
-
fi
|
|
208
|
-
|
|
209
|
-
# Check that function filters out "backlog" status
|
|
210
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE 'backlog'; then
|
|
211
|
-
pass "detect_drift considers backlog status in filtering"
|
|
212
|
-
else
|
|
213
|
-
fail "detect_drift ignores backlog stories" \
|
|
214
|
-
"backlog status check in function" \
|
|
215
|
-
"backlog filter not found"
|
|
216
|
-
fi
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
# Test: detect_drift checks Jira status for drift
|
|
220
|
-
test_detect_drift_checks_jira() {
|
|
221
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
222
|
-
|
|
223
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
224
|
-
fail "detect_drift checks Jira status" "file exists" "sprint-common.sh not found"
|
|
225
|
-
return
|
|
226
|
-
fi
|
|
227
|
-
|
|
228
|
-
# Check if detect_drift queries Jira status
|
|
229
|
-
if grep -A 60 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE 'jira.*status|jira issue view|jira_status'; then
|
|
230
|
-
pass "detect_drift checks Jira status for drift"
|
|
231
|
-
else
|
|
232
|
-
fail "detect_drift checks Jira status" \
|
|
233
|
-
"jira status check in detect_drift" \
|
|
234
|
-
"jira status check not found in function"
|
|
235
|
-
fi
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
# Test: detect_drift output includes Jira status
|
|
239
|
-
test_detect_drift_output_includes_jira() {
|
|
240
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
241
|
-
|
|
242
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
243
|
-
fail "detect_drift output includes Jira status" "file exists" "sprint-common.sh not found"
|
|
244
|
-
return
|
|
245
|
-
fi
|
|
246
|
-
|
|
247
|
-
# Check that output format includes jira_status
|
|
248
|
-
if grep -A 60 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE 'jira_status|:.*jira|story_id.*yaml.*jira'; then
|
|
249
|
-
pass "detect_drift output includes Jira status"
|
|
250
|
-
else
|
|
251
|
-
fail "detect_drift output includes Jira status" \
|
|
252
|
-
"jira_status in output format" \
|
|
253
|
-
"jira status not found in output"
|
|
254
|
-
fi
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
test_detect_drift_function_exists
|
|
258
|
-
test_detect_drift_uses_git_log
|
|
259
|
-
test_detect_drift_checks_yaml
|
|
260
|
-
test_detect_drift_uses_extract
|
|
261
|
-
test_detect_drift_checks_jira
|
|
262
|
-
test_detect_drift_output_includes_jira
|
|
263
|
-
test_detect_drift_no_drift
|
|
264
|
-
test_detect_drift_finds_in_progress
|
|
265
|
-
test_detect_drift_ignores_done
|
|
266
|
-
test_detect_drift_ignores_backlog
|
|
267
|
-
|
|
268
|
-
echo ""
|
|
269
|
-
|
|
270
|
-
# ==============================================================================
|
|
271
|
-
# AC2: Clear report of drifted stories shown to user
|
|
272
|
-
# ==============================================================================
|
|
273
|
-
|
|
274
|
-
echo "--- AC2: Clear report of drifted stories ---"
|
|
275
|
-
echo ""
|
|
276
|
-
|
|
277
|
-
# Test: detect_drift returns story_id:status format
|
|
278
|
-
test_drift_output_format() {
|
|
279
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
280
|
-
|
|
281
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
282
|
-
fail "drift output includes story ID and status" "file exists" "sprint-common.sh not found"
|
|
283
|
-
return
|
|
284
|
-
fi
|
|
285
|
-
|
|
286
|
-
# Check that output includes story_id and status (colon-separated or similar)
|
|
287
|
-
if grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -qE 'story_id.*status|:.*status|\$story_id:\$'; then
|
|
288
|
-
pass "detect_drift output includes story ID and status"
|
|
289
|
-
else
|
|
290
|
-
fail "drift output includes story ID and status" \
|
|
291
|
-
"output format with story_id:status" \
|
|
292
|
-
"output format not found in function"
|
|
293
|
-
fi
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
# Test: workflow-status-check.md references drift detection
|
|
297
|
-
test_workflow_status_check_integration() {
|
|
298
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
299
|
-
|
|
300
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
301
|
-
fail "workflow-status-check includes drift detection" "file exists" "workflow-status-check.md not found"
|
|
302
|
-
return
|
|
303
|
-
fi
|
|
304
|
-
|
|
305
|
-
if grep -qi "drift\|detect_drift" "$workflow_file" 2>/dev/null; then
|
|
306
|
-
pass "workflow-status-check.md references drift detection"
|
|
307
|
-
else
|
|
308
|
-
fail "workflow-status-check includes drift detection" \
|
|
309
|
-
"drift or detect_drift reference in workflow-status-check.md" \
|
|
310
|
-
"no drift reference found"
|
|
311
|
-
fi
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
# Test: Drift report is user-friendly (mentions "merged" and "status")
|
|
315
|
-
test_drift_report_clarity() {
|
|
316
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
317
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
318
|
-
|
|
319
|
-
local found=false
|
|
320
|
-
|
|
321
|
-
# Check sprint-common.sh for descriptive output
|
|
322
|
-
if [[ -f "$sprint_common" ]] && grep -A 30 "detect_drift" "$sprint_common" 2>/dev/null | grep -qi "merged\|drift"; then
|
|
323
|
-
found=true
|
|
324
|
-
fi
|
|
325
|
-
|
|
326
|
-
# Or check workflow-status-check.md for report format
|
|
327
|
-
if [[ -f "$workflow_file" ]] && grep -qi "merged.*status\|drift.*report\|drifted stories" "$workflow_file" 2>/dev/null; then
|
|
328
|
-
found=true
|
|
329
|
-
fi
|
|
330
|
-
|
|
331
|
-
if [[ "$found" == "true" ]]; then
|
|
332
|
-
pass "drift report uses clear terminology (merged, drift, status)"
|
|
333
|
-
else
|
|
334
|
-
fail "drift report clarity" \
|
|
335
|
-
"user-friendly terminology (merged, drift, status)" \
|
|
336
|
-
"clear terminology not found"
|
|
337
|
-
fi
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
test_drift_output_format
|
|
341
|
-
test_workflow_status_check_integration
|
|
342
|
-
test_drift_report_clarity
|
|
343
|
-
|
|
344
|
-
echo ""
|
|
345
|
-
|
|
346
|
-
# ==============================================================================
|
|
347
|
-
# AC3: Option to auto-reconcile (update YAML to done)
|
|
348
|
-
# ==============================================================================
|
|
349
|
-
|
|
350
|
-
echo "--- AC3: Auto-reconcile option ---"
|
|
351
|
-
echo ""
|
|
352
|
-
|
|
353
|
-
# Test: reconcile_drift function or auto-reconcile logic exists
|
|
354
|
-
test_reconcile_function_exists() {
|
|
355
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
356
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
357
|
-
|
|
358
|
-
local found=false
|
|
359
|
-
|
|
360
|
-
# Check for reconcile function in sprint-common.sh
|
|
361
|
-
if [[ -f "$sprint_common" ]] && grep -qi "reconcile_drift\|auto.reconcile\|reconcile" "$sprint_common" 2>/dev/null; then
|
|
362
|
-
found=true
|
|
363
|
-
fi
|
|
364
|
-
|
|
365
|
-
# Or check workflow-status-check.md for reconcile instructions
|
|
366
|
-
if [[ -f "$workflow_file" ]] && grep -qi "reconcile\|auto.reconcile\|update.*done" "$workflow_file" 2>/dev/null; then
|
|
367
|
-
found=true
|
|
368
|
-
fi
|
|
369
|
-
|
|
370
|
-
if [[ "$found" == "true" ]]; then
|
|
371
|
-
pass "auto-reconcile functionality exists"
|
|
372
|
-
else
|
|
373
|
-
fail "auto-reconcile functionality exists" \
|
|
374
|
-
"reconcile_drift function or auto-reconcile logic" \
|
|
375
|
-
"reconcile functionality not found"
|
|
376
|
-
fi
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
# Test: Auto-reconcile uses update_story_status
|
|
380
|
-
test_reconcile_uses_update() {
|
|
381
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
382
|
-
|
|
383
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
384
|
-
fail "reconcile uses update_story_status" "file exists" "sprint-common.sh not found"
|
|
385
|
-
return
|
|
386
|
-
fi
|
|
387
|
-
|
|
388
|
-
# Check if there's reconcile logic that calls update_story_status
|
|
389
|
-
# Look for both being present in the file (they should work together)
|
|
390
|
-
local has_detect=$(grep -c "detect_drift" "$sprint_common" 2>/dev/null || echo "0")
|
|
391
|
-
local has_update=$(grep -c "update_story_status" "$sprint_common" 2>/dev/null || echo "0")
|
|
392
|
-
|
|
393
|
-
if [[ "$has_detect" -gt 0 && "$has_update" -gt 0 ]]; then
|
|
394
|
-
pass "sprint-common.sh has both detect_drift and update_story_status"
|
|
395
|
-
else
|
|
396
|
-
fail "reconcile uses update_story_status" \
|
|
397
|
-
"both detect_drift and update_story_status in sprint-common.sh" \
|
|
398
|
-
"detect_drift=$has_detect, update_story_status=$has_update"
|
|
399
|
-
fi
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
# Test: Auto-reconcile logs to reconciliation.log
|
|
403
|
-
test_reconcile_logs_event() {
|
|
404
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
405
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
406
|
-
|
|
407
|
-
local found=false
|
|
408
|
-
|
|
409
|
-
# Check sprint-common.sh for log_reconciliation call
|
|
410
|
-
if [[ -f "$sprint_common" ]] && grep -qi "log_reconciliation\|reconciliation" "$sprint_common" 2>/dev/null; then
|
|
411
|
-
found=true
|
|
412
|
-
fi
|
|
413
|
-
|
|
414
|
-
# Or check workflow-status-check.md for logging instructions
|
|
415
|
-
if [[ -f "$workflow_file" ]] && grep -qi "log.*reconcil\|reconciliation.log" "$workflow_file" 2>/dev/null; then
|
|
416
|
-
found=true
|
|
417
|
-
fi
|
|
418
|
-
|
|
419
|
-
if [[ "$found" == "true" ]]; then
|
|
420
|
-
pass "auto-reconcile logs to reconciliation.log"
|
|
421
|
-
else
|
|
422
|
-
fail "auto-reconcile logs to reconciliation.log" \
|
|
423
|
-
"log_reconciliation call or reconciliation.log reference" \
|
|
424
|
-
"reconciliation logging not found"
|
|
425
|
-
fi
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
# Test: workflow-status-check offers reconcile option to user
|
|
429
|
-
test_offers_reconcile_option() {
|
|
430
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
431
|
-
|
|
432
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
433
|
-
fail "offers reconcile option" "file exists" "workflow-status-check.md not found"
|
|
434
|
-
return
|
|
435
|
-
fi
|
|
436
|
-
|
|
437
|
-
# Check for user prompt or option offering
|
|
438
|
-
if grep -qiE "auto.reconcile|offer.*reconcile|reconcile.*option|y/n|yes/no" "$workflow_file" 2>/dev/null; then
|
|
439
|
-
pass "workflow-status-check offers reconcile option to user"
|
|
440
|
-
else
|
|
441
|
-
fail "offers reconcile option" \
|
|
442
|
-
"user prompt for auto-reconcile in workflow-status-check.md" \
|
|
443
|
-
"reconcile prompt not found"
|
|
444
|
-
fi
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
# Test: reconcile_drift transitions Jira to Done
|
|
448
|
-
test_reconcile_transitions_jira() {
|
|
449
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
450
|
-
|
|
451
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
452
|
-
fail "reconcile transitions Jira" "file exists" "sprint-common.sh not found"
|
|
453
|
-
return
|
|
454
|
-
fi
|
|
455
|
-
|
|
456
|
-
# Check if reconcile_drift uses jira issue move to transition
|
|
457
|
-
if grep -A 40 "reconcile_drift" "$sprint_common" 2>/dev/null | grep -qE 'jira issue move|jira.*Done|transition.*jira'; then
|
|
458
|
-
pass "reconcile_drift transitions Jira to Done"
|
|
459
|
-
else
|
|
460
|
-
fail "reconcile transitions Jira" \
|
|
461
|
-
"jira issue move or transition in reconcile_drift" \
|
|
462
|
-
"jira transition not found"
|
|
463
|
-
fi
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
# Test: workflow-status-check mentions Jira in drift reconciliation
|
|
467
|
-
test_workflow_mentions_jira_reconcile() {
|
|
468
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
469
|
-
|
|
470
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
471
|
-
fail "workflow mentions Jira reconcile" "file exists" "workflow-status-check.md not found"
|
|
472
|
-
return
|
|
473
|
-
fi
|
|
474
|
-
|
|
475
|
-
if grep -qiE 'jira.*done|transition.*jira|jira.*status' "$workflow_file" 2>/dev/null; then
|
|
476
|
-
pass "workflow-status-check mentions Jira in reconciliation"
|
|
477
|
-
else
|
|
478
|
-
fail "workflow mentions Jira reconcile" \
|
|
479
|
-
"Jira transition reference in workflow-status-check.md" \
|
|
480
|
-
"Jira reconcile not found"
|
|
481
|
-
fi
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
test_reconcile_function_exists
|
|
485
|
-
test_reconcile_uses_update
|
|
486
|
-
test_reconcile_transitions_jira
|
|
487
|
-
test_reconcile_logs_event
|
|
488
|
-
test_offers_reconcile_option
|
|
489
|
-
test_workflow_mentions_jira_reconcile
|
|
490
|
-
|
|
491
|
-
echo ""
|
|
492
|
-
|
|
493
|
-
# ==============================================================================
|
|
494
|
-
# Integration Tests
|
|
495
|
-
# ==============================================================================
|
|
496
|
-
|
|
497
|
-
echo "--- Integration: Drift Detection Pipeline ---"
|
|
498
|
-
echo ""
|
|
499
|
-
|
|
500
|
-
# Test: All required functions exist together
|
|
501
|
-
test_drift_pipeline_complete() {
|
|
502
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
503
|
-
|
|
504
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
505
|
-
fail "drift pipeline complete" "file exists" "sprint-common.sh not found"
|
|
506
|
-
return
|
|
507
|
-
fi
|
|
508
|
-
|
|
509
|
-
local has_extract=$(grep -c "extract_story_id" "$sprint_common" 2>/dev/null || echo "0")
|
|
510
|
-
local has_get=$(grep -c "get_story_field" "$sprint_common" 2>/dev/null || echo "0")
|
|
511
|
-
local has_update=$(grep -c "update_story_status" "$sprint_common" 2>/dev/null || echo "0")
|
|
512
|
-
local has_log=$(grep -c "log_reconciliation" "$sprint_common" 2>/dev/null || echo "0")
|
|
513
|
-
local has_detect=$(grep -c "detect_drift" "$sprint_common" 2>/dev/null || echo "0")
|
|
514
|
-
|
|
515
|
-
if [[ "$has_extract" -gt 0 && "$has_get" -gt 0 && "$has_update" -gt 0 && "$has_log" -gt 0 && "$has_detect" -gt 0 ]]; then
|
|
516
|
-
pass "all drift detection pipeline functions exist"
|
|
517
|
-
else
|
|
518
|
-
fail "drift pipeline complete" \
|
|
519
|
-
"extract_story_id, get_story_field, update_story_status, log_reconciliation, detect_drift" \
|
|
520
|
-
"extract=$has_extract get=$has_get update=$has_update log=$has_log detect=$has_detect"
|
|
521
|
-
fi
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
# Test: detect_drift is callable without errors
|
|
525
|
-
test_detect_drift_callable() {
|
|
526
|
-
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/sprint-common.sh"
|
|
527
|
-
|
|
528
|
-
if [[ ! -f "$sprint_common" ]]; then
|
|
529
|
-
fail "detect_drift callable" "file exists" "sprint-common.sh not found"
|
|
530
|
-
return
|
|
531
|
-
fi
|
|
532
|
-
|
|
533
|
-
(
|
|
534
|
-
source "$sprint_common" 2>/dev/null || true
|
|
535
|
-
|
|
536
|
-
if type detect_drift &>/dev/null; then
|
|
537
|
-
# Just try to call it - we don't care about the result
|
|
538
|
-
detect_drift 2>/dev/null
|
|
539
|
-
echo "PASS"
|
|
540
|
-
else
|
|
541
|
-
echo "FAIL:function not found"
|
|
542
|
-
fi
|
|
543
|
-
) | {
|
|
544
|
-
read -r output
|
|
545
|
-
if [[ "$output" == "PASS" ]]; then
|
|
546
|
-
pass "detect_drift is callable without errors"
|
|
547
|
-
else
|
|
548
|
-
local got="${output#FAIL:}"
|
|
549
|
-
fail "detect_drift callable" \
|
|
550
|
-
"function exists and runs without error" \
|
|
551
|
-
"${got:-unknown error}"
|
|
552
|
-
fi
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
test_drift_pipeline_complete
|
|
557
|
-
test_detect_drift_callable
|
|
558
|
-
|
|
559
|
-
echo ""
|
|
560
|
-
|
|
561
|
-
# ==============================================================================
|
|
562
|
-
# Summary
|
|
563
|
-
# ==============================================================================
|
|
564
|
-
|
|
565
|
-
echo "=== Test Summary ==="
|
|
566
|
-
echo "Tests run: $TESTS_RUN"
|
|
567
|
-
echo -e "Passed: ${GREEN}$TESTS_PASSED${NC}"
|
|
568
|
-
echo -e "Failed: ${RED}$TESTS_FAILED${NC}"
|
|
569
|
-
|
|
570
|
-
if [[ $TESTS_FAILED -gt 0 ]]; then
|
|
571
|
-
echo ""
|
|
572
|
-
echo -e "${YELLOW}Story 8-2 Status: RED (tests failing - ready for Dev)${NC}"
|
|
573
|
-
echo ""
|
|
574
|
-
echo "Dev should implement:"
|
|
575
|
-
echo " 1. Add detect_drift() function to sprint-common.sh (AC1)"
|
|
576
|
-
echo " - Scan git log --merges for recent merges (7 days)"
|
|
577
|
-
echo " - Extract story IDs from feat/X-Y-* branches"
|
|
578
|
-
echo " - Compare merged stories against YAML AND Jira status"
|
|
579
|
-
echo " - Return list of drifted stories (status != done, != backlog)"
|
|
580
|
-
echo " 2. Output format: story_id:yaml_status:jira_status (AC2)"
|
|
581
|
-
echo " - Clear, user-friendly terminology"
|
|
582
|
-
echo " - Include both YAML and Jira status"
|
|
583
|
-
echo " 3. Add Step 2.5 to workflow-status-check.md (AC1, AC2)"
|
|
584
|
-
echo " - Call detect_drift after git scan"
|
|
585
|
-
echo " - Report drifted stories before state determination"
|
|
586
|
-
echo " 4. Add auto-reconcile option (AC3)"
|
|
587
|
-
echo " - Offer to update YAML to done"
|
|
588
|
-
echo " - Transition Jira issue to Done"
|
|
589
|
-
echo " - Use update_story_status() for YAML reconciliation"
|
|
590
|
-
echo " - Use jira issue move for Jira transition"
|
|
591
|
-
echo " - Log to reconciliation.log"
|
|
592
|
-
exit 1
|
|
593
|
-
else
|
|
594
|
-
echo ""
|
|
595
|
-
echo -e "${GREEN}ALL TESTS PASSED - Story 8-2 Complete${NC}"
|
|
596
|
-
exit 0
|
|
597
|
-
fi
|