@pennyfarthing/core 6.6.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/README.md +293 -0
- package/package.json +58 -0
- package/packages/core/bin/pennyfarthing.js +14 -0
- package/packages/core/dist/bmad/context-reader.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.js +369 -0
- package/packages/core/dist/bmad/context-reader.js.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.js +878 -0
- package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
- package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.js +331 -0
- package/packages/core/dist/bmad/epics-parser.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.js +449 -0
- package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
- package/packages/core/dist/bmad/index.d.ts +11 -0
- package/packages/core/dist/bmad/index.d.ts.map +1 -0
- package/packages/core/dist/bmad/index.js +24 -0
- package/packages/core/dist/bmad/index.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.d.ts +173 -0
- package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.js +463 -0
- package/packages/core/dist/bmad/status-sync.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.js +702 -0
- package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
- package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.js +170 -0
- package/packages/core/dist/bmad/story-exporter.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.js +603 -0
- package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.js +307 -0
- package/packages/core/dist/bmad/story-parser.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.js +693 -0
- package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
- package/packages/core/dist/cli/commands/command.d.ts +28 -0
- package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/command.js +399 -0
- package/packages/core/dist/cli/commands/command.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.js +191 -0
- package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.js +243 -0
- package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
- package/packages/core/dist/cli/commands/doctor.d.ts +9 -0
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/doctor.js +652 -0
- package/packages/core/dist/cli/commands/doctor.js.map +1 -0
- package/packages/core/dist/cli/commands/init.d.ts +8 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/init.js +524 -0
- package/packages/core/dist/cli/commands/init.js.map +1 -0
- package/packages/core/dist/cli/commands/skill.d.ts +28 -0
- package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/skill.js +416 -0
- package/packages/core/dist/cli/commands/skill.js.map +1 -0
- package/packages/core/dist/cli/commands/theme.d.ts +21 -0
- package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/theme.js +201 -0
- package/packages/core/dist/cli/commands/theme.js.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.js +237 -0
- package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
- package/packages/core/dist/cli/commands/update.d.ts +9 -0
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/update.js +545 -0
- package/packages/core/dist/cli/commands/update.js.map +1 -0
- package/packages/core/dist/cli/commands/version.d.ts +2 -0
- package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/version.js +28 -0
- package/packages/core/dist/cli/commands/version.js.map +1 -0
- package/packages/core/dist/cli/customization.test.d.ts +12 -0
- package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
- package/packages/core/dist/cli/customization.test.js +84 -0
- package/packages/core/dist/cli/customization.test.js.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.js +224 -0
- package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
- package/packages/core/dist/cli/index.d.ts +3 -0
- package/packages/core/dist/cli/index.d.ts.map +1 -0
- package/packages/core/dist/cli/index.js +174 -0
- package/packages/core/dist/cli/index.js.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.js +356 -0
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
- package/packages/core/dist/cli/utils/constants.d.ts +60 -0
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/constants.js +52 -0
- package/packages/core/dist/cli/utils/constants.js.map +1 -0
- package/packages/core/dist/cli/utils/files.d.ts +71 -0
- package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/files.js +162 -0
- package/packages/core/dist/cli/utils/files.js.map +1 -0
- package/packages/core/dist/cli/utils/logger.d.ts +26 -0
- package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/logger.js +88 -0
- package/packages/core/dist/cli/utils/logger.js.map +1 -0
- package/packages/core/dist/cli/utils/manifest.d.ts +47 -0
- package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/manifest.js +90 -0
- package/packages/core/dist/cli/utils/manifest.js.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.js +22 -0
- package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
- package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
- package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/prompts.js +93 -0
- package/packages/core/dist/cli/utils/prompts.js.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts +29 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.js +181 -0
- package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.d.ts +104 -0
- package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.js +393 -0
- package/packages/core/dist/cli/utils/themes.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.js +144 -0
- package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
- package/packages/core/dist/cli/utils/version.d.ts +10 -0
- package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/version.js +63 -0
- package/packages/core/dist/cli/utils/version.js.map +1 -0
- package/packages/core/dist/cli/workspace.test.d.ts +8 -0
- package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
- package/packages/core/dist/cli/workspace.test.js +154 -0
- package/packages/core/dist/cli/workspace.test.js.map +1 -0
- package/packages/core/dist/index.d.ts +6 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +10 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/permissions/index.d.ts +9 -0
- package/packages/core/dist/permissions/index.d.ts.map +1 -0
- package/packages/core/dist/permissions/index.js +13 -0
- package/packages/core/dist/permissions/index.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.d.ts +89 -0
- package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.js +120 -0
- package/packages/core/dist/permissions/permission-schema.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.js +367 -0
- package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.js +691 -0
- package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.js +256 -0
- package/packages/core/dist/scripts/generate-all-faces.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +17 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js +372 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
- package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.js +155 -0
- package/packages/core/dist/scripts/generate-ascii-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.js +199 -0
- package/packages/core/dist/scripts/generate-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.js +301 -0
- package/packages/core/dist/scripts/generate-face.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.js +378 -0
- package/packages/core/dist/scripts/generate-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.js +363 -0
- package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.js +366 -0
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.d.ts +37 -0
- package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.js +315 -0
- package/packages/core/dist/scripts/generate-spider.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.js +269 -0
- package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.js +127 -0
- package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.js +199 -0
- package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts +235 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.js +358 -0
- package/packages/core/dist/workflow/generic-handoff.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts +21 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.js +499 -0
- package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
- package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
- package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
- package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.d.ts +131 -0
- package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.js +226 -0
- package/packages/core/dist/workflow/test-cache.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.js +438 -0
- package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts +76 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.js +133 -0
- package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
- package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.js +372 -0
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.d.ts +55 -0
- package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.js +245 -0
- package/packages/core/dist/workflow/workflow-router.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.js +607 -0
- package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +98 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.js +230 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
- package/pennyfarthing-dist/agents/README.md +397 -0
- package/pennyfarthing-dist/agents/architect.md +171 -0
- package/pennyfarthing-dist/agents/dev.md +225 -0
- package/pennyfarthing-dist/agents/devops.md +183 -0
- package/pennyfarthing-dist/agents/generic-handoff.md +451 -0
- package/pennyfarthing-dist/agents/generic-sm-finish.md +261 -0
- package/pennyfarthing-dist/agents/generic-sm-setup.md +214 -0
- package/pennyfarthing-dist/agents/orchestrator.md +316 -0
- package/pennyfarthing-dist/agents/pm.md +153 -0
- package/pennyfarthing-dist/agents/reviewer-preflight.md +224 -0
- package/pennyfarthing-dist/agents/reviewer.md +315 -0
- package/pennyfarthing-dist/agents/sm-file-summary.md +109 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +97 -0
- package/pennyfarthing-dist/agents/sm.md +480 -0
- package/pennyfarthing-dist/agents/tea.md +191 -0
- package/pennyfarthing-dist/agents/tech-writer.md +148 -0
- package/pennyfarthing-dist/agents/testing-runner.md +420 -0
- package/pennyfarthing-dist/agents/ux-designer.md +158 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +332 -0
- package/pennyfarthing-dist/commands/architect.md +62 -0
- package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
- package/pennyfarthing-dist/commands/benchmark.md +467 -0
- package/pennyfarthing-dist/commands/brainstorm.md +91 -0
- package/pennyfarthing-dist/commands/check.md +156 -0
- package/pennyfarthing-dist/commands/chore.md +178 -0
- package/pennyfarthing-dist/commands/close-epic.md +136 -0
- package/pennyfarthing-dist/commands/continue-session.md +184 -0
- package/pennyfarthing-dist/commands/create-branches-from-story.md +374 -0
- package/pennyfarthing-dist/commands/create-theme.md +29 -0
- package/pennyfarthing-dist/commands/dev.md +60 -0
- package/pennyfarthing-dist/commands/devops.md +59 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
- package/pennyfarthing-dist/commands/health-check.md +108 -0
- package/pennyfarthing-dist/commands/help.md +264 -0
- package/pennyfarthing-dist/commands/job-fair.md +102 -0
- package/pennyfarthing-dist/commands/list-themes.md +17 -0
- package/pennyfarthing-dist/commands/new-work.md +127 -0
- package/pennyfarthing-dist/commands/orchestrator.md +56 -0
- package/pennyfarthing-dist/commands/parallel-work.md +71 -0
- package/pennyfarthing-dist/commands/party-mode.md +67 -0
- package/pennyfarthing-dist/commands/permissions.md +193 -0
- package/pennyfarthing-dist/commands/pm.md +60 -0
- package/pennyfarthing-dist/commands/prime.md +140 -0
- package/pennyfarthing-dist/commands/release.md +58 -0
- package/pennyfarthing-dist/commands/repo-status.md +49 -0
- package/pennyfarthing-dist/commands/retro.md +200 -0
- package/pennyfarthing-dist/commands/reviewer.md +64 -0
- package/pennyfarthing-dist/commands/run-ci.md +116 -0
- package/pennyfarthing-dist/commands/set-theme.md +52 -0
- package/pennyfarthing-dist/commands/show-theme.md +21 -0
- package/pennyfarthing-dist/commands/sm.md +70 -0
- package/pennyfarthing-dist/commands/solo.md +411 -0
- package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
- package/pennyfarthing-dist/commands/start-epic.md +156 -0
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +376 -0
- package/pennyfarthing-dist/commands/tea.md +63 -0
- package/pennyfarthing-dist/commands/tech-writer.md +53 -0
- package/pennyfarthing-dist/commands/theme-maker.md +671 -0
- package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
- package/pennyfarthing-dist/commands/ux-designer.md +62 -0
- package/pennyfarthing-dist/commands/work.md +111 -0
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +201 -0
- package/pennyfarthing-dist/guides/HOOKS.md +230 -0
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
- package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
- package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
- package/pennyfarthing-dist/guides/persona-loading.md +46 -0
- package/pennyfarthing-dist/guides/persona-system.md +294 -0
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +388 -0
- package/pennyfarthing-dist/guides/shared-context.md +147 -0
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +348 -0
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +1041 -0
- package/pennyfarthing-dist/guides/workflow-schema.md +195 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
- package/pennyfarthing-dist/output-styles/teaching.md +33 -0
- package/pennyfarthing-dist/output-styles/terse.md +20 -0
- package/pennyfarthing-dist/output-styles/verbose.md +28 -0
- package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/a-team.yaml +207 -0
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
- package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
- package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +243 -0
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +219 -0
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/mash.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +242 -0
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +220 -0
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
- package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +230 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +210 -0
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +208 -0
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +236 -0
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +213 -0
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
- package/pennyfarthing-dist/scripts/add-short-names.mjs +264 -0
- package/pennyfarthing-dist/scripts/agent-session.sh +367 -0
- package/pennyfarthing-dist/scripts/check-context.sh +187 -0
- package/pennyfarthing-dist/scripts/check.sh +497 -0
- package/pennyfarthing-dist/scripts/deploy.sh +284 -0
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +360 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +61 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +66 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +98 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +59 -0
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +91 -0
- package/pennyfarthing-dist/scripts/prime.sh +161 -0
- package/pennyfarthing-dist/scripts/release.sh +198 -0
- package/pennyfarthing-dist/scripts/repo-utils.sh +778 -0
- package/pennyfarthing-dist/scripts/run-ci.sh +219 -0
- package/pennyfarthing-dist/scripts/run.sh +65 -0
- package/pennyfarthing-dist/scripts/statusline.sh +264 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +107 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
- package/pennyfarthing-dist/scripts/uninstall.sh +271 -0
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +177 -0
- package/pennyfarthing-dist/scripts/utils/check-status.sh +251 -0
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +136 -0
- package/pennyfarthing-dist/scripts/utils/common.sh +157 -0
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +230 -0
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +269 -0
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +231 -0
- package/pennyfarthing-dist/scripts/utils/find-root.sh +33 -0
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +110 -0
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +127 -0
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +289 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +443 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +208 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +198 -0
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +162 -0
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +463 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +74 -0
- package/pennyfarthing-dist/scripts/utils/logging.sh +186 -0
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +141 -0
- package/pennyfarthing-dist/scripts/utils/retry.sh +76 -0
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +7 -0
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +319 -0
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +193 -0
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +286 -0
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +241 -0
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +400 -0
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +337 -0
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +160 -0
- package/pennyfarthing-dist/scripts/worktree-manager.sh +498 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +236 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +268 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +117 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +421 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
- package/pennyfarthing-dist/skills/jira/SKILL.md +281 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +524 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
- package/pennyfarthing-dist/skills/otel/skill.md +222 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +173 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +102 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +335 -0
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +120 -0
- package/pennyfarthing-dist/skills/story-management/SKILL.md +208 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
- package/pennyfarthing-dist/skills/theme/skill.md +129 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +169 -0
- package/pennyfarthing-dist/skills/workflow/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
- package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
- package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
- package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
- package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +58 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Compare an agent's performance against a stored baseline
|
|
3
|
+
argument-hint: <theme> <agent> [--as <role>] [--scenario <name>] [--runs N]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Benchmark
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Compare a persona agent's performance against the established control baseline. Runs the agent on the scenario and calculates statistical measures including effect size (Cohen's d) and significance.
|
|
10
|
+
|
|
11
|
+
Default: 4 runs for comparison (balance between reliability and runtime). Runs execute in parallel for faster results.
|
|
12
|
+
|
|
13
|
+
**Simplified Usage:** Just specify theme and agent role - you'll be presented with matching scenarios to choose from.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<critical-integrity-requirements>
|
|
17
|
+
## DO NOT FABRICATE COMPARISON DATA
|
|
18
|
+
|
|
19
|
+
Comparisons are only meaningful if BOTH the baseline AND the contestant runs are real.
|
|
20
|
+
|
|
21
|
+
**Before comparing:**
|
|
22
|
+
1. Validate baseline has proof-of-work (check runs have `proof.*` fields)
|
|
23
|
+
2. Actually run `/solo` for the contestant with real Task tool calls
|
|
24
|
+
3. Validate contestant runs have proof-of-work before calculating statistics
|
|
25
|
+
|
|
26
|
+
**Baseline Validation:**
|
|
27
|
+
Before using a baseline, spot-check at least one run file:
|
|
28
|
+
- Read a run from `internal/results/baselines/{scenario}/{agent}/runs/*.json`
|
|
29
|
+
- Verify it has `proof.agent_task_id`, `proof.agent_response_text`, `proof.judge_task_id`
|
|
30
|
+
- Verify `proof.agent_response_text` is at least 200 characters
|
|
31
|
+
- Verify `token_usage.input_tokens` > 0
|
|
32
|
+
|
|
33
|
+
**If baseline validation fails:**
|
|
34
|
+
```markdown
|
|
35
|
+
Error: Baseline for '{scenario}' appears to be fabricated (missing proof-of-work).
|
|
36
|
+
Run `/benchmark-control --scenario {scenario}` to create a real baseline.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Contestant runs MUST include proof-of-work.** See `/solo` for requirements.
|
|
40
|
+
</critical-integrity-requirements>
|
|
41
|
+
|
|
42
|
+
<usage>
|
|
43
|
+
```
|
|
44
|
+
# Simple: Pick scenario interactively
|
|
45
|
+
/benchmark the-expanse sm
|
|
46
|
+
/benchmark discworld reviewer
|
|
47
|
+
|
|
48
|
+
# Direct: Specify scenario explicitly
|
|
49
|
+
/benchmark discworld reviewer --scenario order-service
|
|
50
|
+
/benchmark ted-lasso dev --scenario tdd-shopping-cart --runs 8
|
|
51
|
+
|
|
52
|
+
# Cross-role: Run any character as any role
|
|
53
|
+
/benchmark shakespeare prospero --as dev --scenario django-10554
|
|
54
|
+
/benchmark discworld granny --as dev --scenario tdd-shopping-cart
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Arguments:**
|
|
58
|
+
- `theme` - The persona theme (e.g., `discworld`, `the-expanse`, `ted-lasso`)
|
|
59
|
+
- `agent` - The agent role OR character name (if using `--as`)
|
|
60
|
+
- `--as <role>` - (Optional) Override role for cross-role testing. Makes `agent` a character name lookup.
|
|
61
|
+
- `--scenario` - (Optional) Scenario name. If omitted, shows matching scenarios to choose from.
|
|
62
|
+
- `--runs N` - Number of evaluation runs (default: 4, max: 20)
|
|
63
|
+
|
|
64
|
+
**Cross-Role Testing:**
|
|
65
|
+
The `--as` flag enables running any character as any role:
|
|
66
|
+
```
|
|
67
|
+
/benchmark shakespeare prospero --as dev --scenario django-10554
|
|
68
|
+
```
|
|
69
|
+
This uses Prospero's persona traits (wise orchestrator) but gives him a dev task.
|
|
70
|
+
The scenario's role determines what the agent is asked to do; the character determines HOW they do it.
|
|
71
|
+
|
|
72
|
+
**Examples:**
|
|
73
|
+
```
|
|
74
|
+
# Let me pick from SM scenarios
|
|
75
|
+
/benchmark the-expanse sm
|
|
76
|
+
|
|
77
|
+
# Let me pick from code review scenarios
|
|
78
|
+
/benchmark discworld reviewer
|
|
79
|
+
|
|
80
|
+
# Run specific scenario directly
|
|
81
|
+
/benchmark princess-bride reviewer --scenario order-service --runs 8
|
|
82
|
+
|
|
83
|
+
# Cross-role: Prospero (SM) doing dev work
|
|
84
|
+
/benchmark shakespeare prospero --as dev --scenario tdd-shopping-cart --runs 4
|
|
85
|
+
```
|
|
86
|
+
</usage>
|
|
87
|
+
|
|
88
|
+
<on-invoke>
|
|
89
|
+
The user invoked this command with: $ARGUMENTS
|
|
90
|
+
|
|
91
|
+
## Step 1: Parse Arguments
|
|
92
|
+
|
|
93
|
+
Parse the arguments to extract:
|
|
94
|
+
- `theme`: First positional argument (e.g., `discworld`, `the-expanse`)
|
|
95
|
+
- `agent_or_character`: Second positional argument (role name OR character name if `--as` is used)
|
|
96
|
+
- `role_override`: Value after `--as` (OPTIONAL - enables cross-role mode)
|
|
97
|
+
- `scenario_name`: Value after `--scenario` (OPTIONAL)
|
|
98
|
+
- `runs`: Value after `--runs` (default: 4, max: 20)
|
|
99
|
+
|
|
100
|
+
**Cross-Role Mode:**
|
|
101
|
+
If `--as <role>` is provided:
|
|
102
|
+
- `agent_or_character` is treated as a CHARACTER NAME (case-insensitive search)
|
|
103
|
+
- `role_override` becomes the `effective_role` for scenario matching
|
|
104
|
+
- Results save to `internal/results/benchmarks/{scenario}/{theme}-{character}-as-{role}/`
|
|
105
|
+
|
|
106
|
+
**Legacy format support:** If first argument contains `:`, split it (e.g., `discworld:reviewer` → theme=discworld, agent_or_character=reviewer)
|
|
107
|
+
|
|
108
|
+
**Validation:**
|
|
109
|
+
- Theme must be a valid theme name
|
|
110
|
+
- If `--as` is provided: validate `role_override` is one of: `sm`, `dev`, `reviewer`, `architect`, `tea`, `pm`
|
|
111
|
+
- If `--as` is NOT provided: validate `agent_or_character` is one of: `sm`, `dev`, `reviewer`, `architect`, `tea`, `pm`
|
|
112
|
+
- `--runs` must be a positive integer between 1 and 20
|
|
113
|
+
|
|
114
|
+
**Determine effective_role:**
|
|
115
|
+
```python
|
|
116
|
+
if role_override:
|
|
117
|
+
effective_role = role_override # e.g., "dev"
|
|
118
|
+
cross_role = True
|
|
119
|
+
else:
|
|
120
|
+
effective_role = agent_or_character # e.g., "dev"
|
|
121
|
+
cross_role = False
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Step 2: Scenario Discovery (if --scenario not provided)
|
|
125
|
+
|
|
126
|
+
If `scenario_name` is NOT provided, discover matching scenarios.
|
|
127
|
+
|
|
128
|
+
**Use `effective_role` (not `agent_or_character`) for scenario discovery.**
|
|
129
|
+
Cross-role mode: Prospero --as dev should see dev scenarios, not SM scenarios.
|
|
130
|
+
|
|
131
|
+
**Role-to-Category Mapping:**
|
|
132
|
+
| effective_role | Scenario Categories |
|
|
133
|
+
|----------------|---------------------|
|
|
134
|
+
| sm | `sm` |
|
|
135
|
+
| dev | `dev` (includes debug scenarios) |
|
|
136
|
+
| reviewer | `code-review` |
|
|
137
|
+
| architect | `architecture` |
|
|
138
|
+
| tea | `tea` |
|
|
139
|
+
|
|
140
|
+
**Time Estimates by Difficulty (parallel execution):**
|
|
141
|
+
| Difficulty | Est. Time (4 runs) | Note |
|
|
142
|
+
|------------|-------------------|------|
|
|
143
|
+
| easy | ~1 min | Runs execute in parallel |
|
|
144
|
+
| medium | ~2 min | Runs execute in parallel |
|
|
145
|
+
| hard | ~4 min | Runs execute in parallel |
|
|
146
|
+
| extreme | ~8 min | Runs execute in parallel |
|
|
147
|
+
|
|
148
|
+
**Discover scenarios:**
|
|
149
|
+
```bash
|
|
150
|
+
# Use Bash to list matching scenarios
|
|
151
|
+
ls scenarios/{category}/*.yaml | xargs -I {} yq -r '"{}|\(.name)|\(.difficulty)|\(.title)|\(.description)"' {}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Present choices with AskUserQuestion:**
|
|
155
|
+
```yaml
|
|
156
|
+
AskUserQuestion:
|
|
157
|
+
questions:
|
|
158
|
+
- question: "Which scenario do you want to benchmark {theme}:{agent_type} on?"
|
|
159
|
+
header: "Scenario"
|
|
160
|
+
multiSelect: false
|
|
161
|
+
options:
|
|
162
|
+
- label: "{name} ({difficulty})"
|
|
163
|
+
description: "{title} - ~{time_estimate}"
|
|
164
|
+
# ... up to 4 options
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
If more than 4 scenarios exist, show the first 4 by difficulty (hardest first) and let user type "Other" for full list.
|
|
168
|
+
|
|
169
|
+
**After user selects:** Set `scenario_name` to the selected scenario's name and continue.
|
|
170
|
+
|
|
171
|
+
## Step 3: Control Theme Handling
|
|
172
|
+
|
|
173
|
+
**If theme is `control`:** This is a baseline creation run.
|
|
174
|
+
- Default `runs` to 10 (instead of 4) for statistical reliability
|
|
175
|
+
- Results save to `internal/results/baselines/{scenario}/{agent}/` instead of comparison
|
|
176
|
+
- Skip baseline validation (we're creating the baseline)
|
|
177
|
+
- After running, calculate and save baseline statistics
|
|
178
|
+
- Display baseline summary and exit
|
|
179
|
+
|
|
180
|
+
**If theme is NOT `control`:** Continue to Step 4 for comparison workflow.
|
|
181
|
+
|
|
182
|
+
## Step 4: Load and Validate Baseline
|
|
183
|
+
|
|
184
|
+
**Baseline is based on `effective_role`, not the character's native role.**
|
|
185
|
+
Cross-role tests compare against the effective role's baseline (e.g., prospero --as dev compares against control:dev).
|
|
186
|
+
|
|
187
|
+
Check if baseline exists:
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
Read tool:
|
|
191
|
+
file_path: "internal/results/baselines/{scenario_name}/{effective_role}/summary.yaml"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**If baseline does not exist:**
|
|
195
|
+
```markdown
|
|
196
|
+
Error: No baseline found for scenario '{scenario_name}' with agent type '{agent_type}'.
|
|
197
|
+
|
|
198
|
+
To create a baseline, run:
|
|
199
|
+
/benchmark control {agent_type} --scenario {scenario_name}
|
|
200
|
+
|
|
201
|
+
Or use the shortcut:
|
|
202
|
+
/benchmark-control {agent_type} --scenario {scenario_name}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**If baseline exists, VALIDATE IT:**
|
|
206
|
+
|
|
207
|
+
1. Get list of run files:
|
|
208
|
+
```yaml
|
|
209
|
+
Glob tool:
|
|
210
|
+
pattern: "internal/results/baselines/{scenario_name}/{agent_type}/runs/*.json"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2. Read at least one run file and validate proof-of-work:
|
|
214
|
+
```yaml
|
|
215
|
+
Read tool:
|
|
216
|
+
file_path: "{first run file}"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
3. **Check for proof-of-work fields:**
|
|
220
|
+
- Has `proof.agent_task_id`?
|
|
221
|
+
- Has `proof.agent_response_text` with length >= 200?
|
|
222
|
+
- Has `proof.judge_task_id`?
|
|
223
|
+
- Has `proof.judge_response_text`?
|
|
224
|
+
- Has `token_usage.input_tokens` > 0?
|
|
225
|
+
- Has `token_usage.output_tokens` > 0?
|
|
226
|
+
|
|
227
|
+
4. **If validation fails:**
|
|
228
|
+
```markdown
|
|
229
|
+
Error: Baseline for '{scenario_name}' is INVALID - missing proof-of-work.
|
|
230
|
+
|
|
231
|
+
The baseline data appears to be fabricated (no agent/judge response text,
|
|
232
|
+
no task IDs, or no token counts).
|
|
233
|
+
|
|
234
|
+
Delete the invalid baseline and create a real one:
|
|
235
|
+
rm -rf internal/results/baselines/{scenario_name}/{agent_type}
|
|
236
|
+
/benchmark-control --scenario {scenario_name}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**If baseline is valid:**
|
|
240
|
+
- Extract `sample_size`, `statistics.total.mean`, `statistics.total.std_dev`
|
|
241
|
+
- Display baseline info with validation confirmation
|
|
242
|
+
|
|
243
|
+
**Sample size warning:**
|
|
244
|
+
If baseline sample size < 5:
|
|
245
|
+
```markdown
|
|
246
|
+
**Warning:** Baseline sample size ({n}) is less than 5. Results may not be statistically reliable.
|
|
247
|
+
Consider running `/benchmark-control --scenario {scenario_name} --runs 10` to add more data.
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Step 5: Run Contestant Evaluation (Parallel)
|
|
251
|
+
|
|
252
|
+
For efficiency, spawn multiple runs in parallel using Task agents.
|
|
253
|
+
|
|
254
|
+
**Batch Strategy:**
|
|
255
|
+
- If runs ≤ 4: Spawn all in parallel (single message with N Task agents)
|
|
256
|
+
- If runs > 4: Spawn in batches of 4 to avoid overwhelming the system
|
|
257
|
+
|
|
258
|
+
**Build the /solo command:**
|
|
259
|
+
```python
|
|
260
|
+
if cross_role:
|
|
261
|
+
# Cross-role: agent_or_character is a character name
|
|
262
|
+
solo_cmd = f"/solo {theme}:{agent_or_character} --as {effective_role} --scenario {scenario_name}"
|
|
263
|
+
else:
|
|
264
|
+
# Standard: agent_or_character is the role name
|
|
265
|
+
solo_cmd = f"/solo {theme}:{agent_or_character} --scenario {scenario_name}"
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**For each run, spawn a Task agent:**
|
|
269
|
+
```
|
|
270
|
+
Task (run 1 of N):
|
|
271
|
+
subagent_type: general-purpose
|
|
272
|
+
prompt: |
|
|
273
|
+
Run {solo_cmd}
|
|
274
|
+
This is run 1 of N for baseline/benchmark.
|
|
275
|
+
Return the full result JSON including score and token_usage.
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Example commands:**
|
|
279
|
+
- Standard: `/solo discworld:dev --scenario tdd-shopping-cart`
|
|
280
|
+
- Cross-role: `/solo shakespeare:prospero --as dev --scenario tdd-shopping-cart`
|
|
281
|
+
|
|
282
|
+
**Spawn all batch tasks in a SINGLE message for parallel execution.**
|
|
283
|
+
|
|
284
|
+
Wait for all tasks to complete. Collect results:
|
|
285
|
+
- Per-run scores (total, plus dimension breakdown if available)
|
|
286
|
+
- Per-run token usage (input_tokens, output_tokens)
|
|
287
|
+
- Per-run timestamps
|
|
288
|
+
- Cross-role metadata (source_role, effective_role, cross_role flag)
|
|
289
|
+
|
|
290
|
+
**If a run fails:** Note the failure, continue with successful runs. Warn if < 3 successful runs.
|
|
291
|
+
|
|
292
|
+
## Step 6: Calculate Comparison Statistics
|
|
293
|
+
|
|
294
|
+
**Contestant Statistics:**
|
|
295
|
+
- `contestant_mean`: Average total score
|
|
296
|
+
- `contestant_std_dev`: Standard deviation
|
|
297
|
+
- `contestant_n`: Number of runs
|
|
298
|
+
|
|
299
|
+
**Baseline Statistics (from summary.yaml):**
|
|
300
|
+
- `baseline_mean`: statistics.total.mean
|
|
301
|
+
- `baseline_std_dev`: statistics.total.std_dev
|
|
302
|
+
- `baseline_n`: sample_size
|
|
303
|
+
|
|
304
|
+
**Mean Difference:**
|
|
305
|
+
```
|
|
306
|
+
difference = contestant_mean - baseline_mean
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Cohen's d Effect Size:**
|
|
310
|
+
```
|
|
311
|
+
pooled_std_dev = sqrt((contestant_std_dev² + baseline_std_dev²) / 2)
|
|
312
|
+
cohens_d = difference / pooled_std_dev
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Effect Size Interpretation:**
|
|
316
|
+
| Cohen's d | Interpretation |
|
|
317
|
+
|-----------|----------------|
|
|
318
|
+
| < 0.2 | Negligible |
|
|
319
|
+
| 0.2 - 0.5 | Small |
|
|
320
|
+
| 0.5 - 0.8 | Medium |
|
|
321
|
+
| > 0.8 | Large |
|
|
322
|
+
|
|
323
|
+
**95% Confidence Interval for Difference:**
|
|
324
|
+
```
|
|
325
|
+
se_diff = sqrt(contestant_std_dev²/contestant_n + baseline_std_dev²/baseline_n)
|
|
326
|
+
ci_lower = difference - 1.96 × se_diff
|
|
327
|
+
ci_upper = difference + 1.96 × se_diff
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Statistical Significance:**
|
|
331
|
+
If CI does not include 0, the difference is statistically significant at p < 0.05.
|
|
332
|
+
|
|
333
|
+
## Step 7: Display Comparison Results
|
|
334
|
+
|
|
335
|
+
```markdown
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Baseline Comparison
|
|
339
|
+
|
|
340
|
+
**Contestant:** {theme}:{agent_type} ({character_name})
|
|
341
|
+
**Scenario:** {scenario_name}
|
|
342
|
+
**Baseline:** control:{agent_type} (n={baseline_n})
|
|
343
|
+
|
|
344
|
+
### Performance vs Baseline
|
|
345
|
+
|
|
346
|
+
| Metric | Contestant | Baseline | Difference | Effect Size |
|
|
347
|
+
|--------|------------|----------|------------|-------------|
|
|
348
|
+
| Total Score | {c_mean} ± {c_std} | {b_mean} ± {b_std} | {diff:+.1f} | **{cohens_d:.1f}σ** ({interpretation}) |
|
|
349
|
+
| Detection | {c_det} | {b_det} | {diff:+.1f} | {effect} |
|
|
350
|
+
| Depth | {c_dep} | {b_dep} | {diff:+.1f} | {effect} |
|
|
351
|
+
| Quality | {c_qual} | {b_qual} | {diff:+.1f} | {effect} |
|
|
352
|
+
| Persona | {c_per} | {b_per} | {diff:+.1f} | {effect} |
|
|
353
|
+
|
|
354
|
+
### Efficiency
|
|
355
|
+
|
|
356
|
+
| Metric | Contestant | Baseline |
|
|
357
|
+
|--------|------------|----------|
|
|
358
|
+
| Tokens/Point | {c_tokens_per_point} | {b_tokens_per_point} |
|
|
359
|
+
| Efficiency | {efficiency_pct}% of baseline | 100% |
|
|
360
|
+
|
|
361
|
+
### Statistical Significance
|
|
362
|
+
|
|
363
|
+
- **Effect Size (Cohen's d):** {cohens_d:.2f} ({interpretation})
|
|
364
|
+
- **95% CI for difference:** [{ci_lower:+.1f}, {ci_upper:+.1f}]
|
|
365
|
+
- **Significant:** {Yes/No} (p < 0.05)
|
|
366
|
+
|
|
367
|
+
### Verdict
|
|
368
|
+
|
|
369
|
+
{verdict based on effect size and significance}
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Verdict Logic:**
|
|
375
|
+
- If not significant: "No statistically significant difference from baseline."
|
|
376
|
+
- If significant and positive large effect: "Contestant **significantly outperforms** baseline with large effect size."
|
|
377
|
+
- If significant and positive medium effect: "Contestant **outperforms** baseline with medium effect size."
|
|
378
|
+
- If significant and positive small effect: "Contestant **slightly outperforms** baseline."
|
|
379
|
+
- If significant and negative: "Contestant **underperforms** baseline."
|
|
380
|
+
|
|
381
|
+
## Step 8: Save Results (ALWAYS)
|
|
382
|
+
|
|
383
|
+
**Output path logic:**
|
|
384
|
+
```python
|
|
385
|
+
if theme == "control":
|
|
386
|
+
base_path = f"internal/results/baselines/{scenario_name}/{effective_role}/"
|
|
387
|
+
elif cross_role:
|
|
388
|
+
# Cross-role: include character slug for clarity
|
|
389
|
+
character_slug = slugify(character_name) # e.g., "prospero", "granny-weatherwax"
|
|
390
|
+
base_path = f"internal/results/benchmarks/{scenario_name}/{theme}-{character_slug}-as-{effective_role}/"
|
|
391
|
+
else:
|
|
392
|
+
base_path = f"internal/results/benchmarks/{scenario_name}/{theme}-{effective_role}/"
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Cross-role examples:**
|
|
396
|
+
- `/benchmark shakespeare prospero --as dev` → `internal/results/benchmarks/{scenario}/shakespeare-prospero-as-dev/`
|
|
397
|
+
- `/benchmark discworld granny --as dev` → `internal/results/benchmarks/{scenario}/discworld-granny-weatherwax-as-dev/`
|
|
398
|
+
|
|
399
|
+
**Save structure:**
|
|
400
|
+
```
|
|
401
|
+
{base_path}/
|
|
402
|
+
├── runs/
|
|
403
|
+
│ ├── run_1.json
|
|
404
|
+
│ ├── judge_1.json
|
|
405
|
+
│ └── ...
|
|
406
|
+
└── summary.yaml
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**summary.yaml format:** See `/solo` command Step 10. For cross-role runs, include:
|
|
410
|
+
```yaml
|
|
411
|
+
agent:
|
|
412
|
+
theme: {theme}
|
|
413
|
+
character: {character_name}
|
|
414
|
+
source_role: {source_role} # where character normally lives (e.g., sm)
|
|
415
|
+
effective_role: {effective_role} # what they're doing (e.g., dev)
|
|
416
|
+
cross_role: true
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**ALWAYS save summary.yaml, even for n=1.** This ensures consistent data structure for analysis.
|
|
420
|
+
|
|
421
|
+
Display:
|
|
422
|
+
```
|
|
423
|
+
✓ Saved {n} run(s) to {base_path}
|
|
424
|
+
✓ Summary: {base_path}/summary.yaml
|
|
425
|
+
```
|
|
426
|
+
</on-invoke>
|
|
427
|
+
|
|
428
|
+
<error-handling>
|
|
429
|
+
**Baseline not found:**
|
|
430
|
+
```markdown
|
|
431
|
+
Error: No baseline found for scenario '{scenario_name}' with agent type '{agent_type}'.
|
|
432
|
+
|
|
433
|
+
To create a baseline, run:
|
|
434
|
+
/benchmark-control --scenario {scenario_name}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Invalid contestant spec:**
|
|
438
|
+
```markdown
|
|
439
|
+
Error: Invalid contestant format. Expected 'theme:agent', got '{value}'.
|
|
440
|
+
|
|
441
|
+
Examples:
|
|
442
|
+
- discworld:reviewer
|
|
443
|
+
- princess-bride:dev
|
|
444
|
+
- control:sm
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
**Missing --scenario:**
|
|
448
|
+
```markdown
|
|
449
|
+
Error: --scenario is required.
|
|
450
|
+
|
|
451
|
+
Usage: /benchmark <theme:agent> --scenario <name> [--runs N]
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
**Invalid runs value:**
|
|
455
|
+
```markdown
|
|
456
|
+
Error: --runs must be between 1 and 20. Got: {value}
|
|
457
|
+
```
|
|
458
|
+
</error-handling>
|
|
459
|
+
|
|
460
|
+
<reference>
|
|
461
|
+
- Solo Command: `.claude/project/commands/solo.md`
|
|
462
|
+
- Establish Baseline: `.claude/project/commands/benchmark-control.md`
|
|
463
|
+
- Effect Size: Cohen's d standard interpretation (0.2 small, 0.5 medium, 0.8 large)
|
|
464
|
+
- Baselines: `internal/results/baselines/{scenario}/{role}/` (control theme)
|
|
465
|
+
- Benchmarks: `internal/results/benchmarks/{scenario}/{theme}-{role}/` (all other themes)
|
|
466
|
+
- Results README: `internal/results/README.md`
|
|
467
|
+
</reference>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Structured problem-solving brainstorm session
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Brainstorm - Structured Problem-Solving Session
|
|
6
|
+
|
|
7
|
+
You are facilitating a **structured brainstorming session** to solve a specific problem or explore a specific question.
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
Unlike party-mode (free-form), brainstorm follows a structured approach:
|
|
12
|
+
|
|
13
|
+
### Phase 1: Problem Definition (2 min)
|
|
14
|
+
- What exactly are we trying to solve?
|
|
15
|
+
- What constraints exist?
|
|
16
|
+
- What does success look like?
|
|
17
|
+
|
|
18
|
+
### Phase 2: Divergent Thinking (5 min)
|
|
19
|
+
Generate as many ideas as possible without judgment:
|
|
20
|
+
- Quantity over quality
|
|
21
|
+
- Build on others' ideas
|
|
22
|
+
- No criticism yet
|
|
23
|
+
- Wild ideas welcome
|
|
24
|
+
|
|
25
|
+
### Phase 3: Clustering (2 min)
|
|
26
|
+
Group similar ideas into themes:
|
|
27
|
+
- Technical solutions
|
|
28
|
+
- Process changes
|
|
29
|
+
- UX improvements
|
|
30
|
+
- Quick wins vs. long-term
|
|
31
|
+
|
|
32
|
+
### Phase 4: Evaluation (3 min)
|
|
33
|
+
Score top ideas on:
|
|
34
|
+
- **Impact**: How much does this solve the problem? (1-5)
|
|
35
|
+
- **Effort**: How hard to implement? (1-5, lower is easier)
|
|
36
|
+
- **Risk**: What could go wrong? (1-5, lower is safer)
|
|
37
|
+
|
|
38
|
+
### Phase 5: Selection (1 min)
|
|
39
|
+
Choose 1-3 ideas to pursue based on:
|
|
40
|
+
- Highest impact/effort ratio
|
|
41
|
+
- Acceptable risk level
|
|
42
|
+
- Alignment with current priorities
|
|
43
|
+
|
|
44
|
+
## Output Template
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
## Brainstorm: [Problem Statement]
|
|
48
|
+
|
|
49
|
+
### Problem Definition
|
|
50
|
+
- **Problem**: [Clear statement]
|
|
51
|
+
- **Constraints**: [List]
|
|
52
|
+
- **Success criteria**: [Measurable outcomes]
|
|
53
|
+
|
|
54
|
+
### Ideas Generated
|
|
55
|
+
| # | Idea | Theme | Impact | Effort | Risk |
|
|
56
|
+
|---|------|-------|--------|--------|------|
|
|
57
|
+
| 1 | ... | Technical | 4 | 3 | 2 |
|
|
58
|
+
| 2 | ... | Process | 3 | 1 | 1 |
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
### Selected for Action
|
|
62
|
+
1. **[Idea]** - [Why selected]
|
|
63
|
+
- Next step: [Concrete action]
|
|
64
|
+
- Owner: [Who/which agent]
|
|
65
|
+
|
|
66
|
+
### Parked Ideas
|
|
67
|
+
- [Ideas worth revisiting later]
|
|
68
|
+
|
|
69
|
+
### Discarded
|
|
70
|
+
- [Ideas and why they don't fit]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
/brainstorm How can we reduce ticket resolution time?
|
|
77
|
+
/brainstorm What's the best way to implement real-time updates?
|
|
78
|
+
/brainstorm Why are users abandoning the onboarding flow?
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Tips
|
|
82
|
+
|
|
83
|
+
- Time-box each phase
|
|
84
|
+
- Write everything down
|
|
85
|
+
- Don't let one voice dominate
|
|
86
|
+
- "Yes, and..." not "No, but..."
|
|
87
|
+
- The obvious idea might be the right one
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
**WHAT PROBLEM SHALL WE SOLVE?**
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run quality gates (lint, type check, tests) before handoff
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<purpose>
|
|
6
|
+
Run all quality gates before handing off to Reviewer. Ensures code meets quality standards.
|
|
7
|
+
</purpose>
|
|
8
|
+
|
|
9
|
+
<when-to-use>
|
|
10
|
+
- Before creating a PR
|
|
11
|
+
- Before handoff to Reviewer
|
|
12
|
+
- After implementing a feature
|
|
13
|
+
- To verify codebase health
|
|
14
|
+
</when-to-use>
|
|
15
|
+
|
|
16
|
+
<execution>
|
|
17
|
+
|
|
18
|
+
## Running Quality Checks
|
|
19
|
+
|
|
20
|
+
Use the check.sh script:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Run all checks (lint, typecheck, tests)
|
|
24
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh
|
|
25
|
+
|
|
26
|
+
# Run checks in a specific repo subdirectory
|
|
27
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --repo api
|
|
28
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --repo ui
|
|
29
|
+
|
|
30
|
+
# Run only tests (skip lint and typecheck)
|
|
31
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --tests-only
|
|
32
|
+
|
|
33
|
+
# Run tests with a filter pattern
|
|
34
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --filter "TestUserLogin"
|
|
35
|
+
|
|
36
|
+
# Run filtered tests in a specific repo
|
|
37
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --repo api --filter "TestUserLogin"
|
|
38
|
+
|
|
39
|
+
# Run only filtered tests (no lint/typecheck)
|
|
40
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --tests-only --filter "TestUserLogin"
|
|
41
|
+
|
|
42
|
+
# Skip individual checks
|
|
43
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --no-lint
|
|
44
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --no-typecheck
|
|
45
|
+
|
|
46
|
+
# Skip all checks (emergencies only)
|
|
47
|
+
$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh --skip-check
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Options
|
|
51
|
+
|
|
52
|
+
| Option | Description |
|
|
53
|
+
|--------|-------------|
|
|
54
|
+
| `--skip-check` | Skip all checks (emergency bypass) |
|
|
55
|
+
| `--tests-only` | Run only tests, skip lint and typecheck |
|
|
56
|
+
| `--filter PATTERN` | Filter tests by pattern |
|
|
57
|
+
| `--repo REPO` | Run checks in a specific repo subdirectory |
|
|
58
|
+
| `--no-lint` | Skip lint check |
|
|
59
|
+
| `--no-typecheck` | Skip type check |
|
|
60
|
+
|
|
61
|
+
## What Gets Checked
|
|
62
|
+
|
|
63
|
+
The script automatically detects project type and runs appropriate checks:
|
|
64
|
+
|
|
65
|
+
### For Node/TypeScript Projects:
|
|
66
|
+
| Check | Command | Condition |
|
|
67
|
+
|-------|---------|-----------|
|
|
68
|
+
| Lint | `just lint` or `npm run lint` | If configured |
|
|
69
|
+
| Type Check | `just typecheck` or `tsc --noEmit` | If tsconfig.json exists |
|
|
70
|
+
| Tests | `just test` or `npm test` | If configured |
|
|
71
|
+
|
|
72
|
+
### For Go Projects:
|
|
73
|
+
| Check | Command | Condition |
|
|
74
|
+
|-------|---------|-----------|
|
|
75
|
+
| Lint | `just lint` or `golangci-lint run` | If available |
|
|
76
|
+
| Tests | `just test` or `go test ./...` | Always |
|
|
77
|
+
|
|
78
|
+
### Justfile Preference
|
|
79
|
+
If both justfile and npm scripts exist, justfile recipes take priority.
|
|
80
|
+
|
|
81
|
+
</execution>
|
|
82
|
+
|
|
83
|
+
<output-format>
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Quality Gate Check
|
|
87
|
+
==================
|
|
88
|
+
Project: /path/to/project
|
|
89
|
+
|
|
90
|
+
Lint
|
|
91
|
+
========================================
|
|
92
|
+
[PASS] Lint (npm run lint)
|
|
93
|
+
|
|
94
|
+
Type Check
|
|
95
|
+
========================================
|
|
96
|
+
[PASS] Type Check (tsc --noEmit)
|
|
97
|
+
|
|
98
|
+
Tests
|
|
99
|
+
========================================
|
|
100
|
+
[PASS] Tests (npm test)
|
|
101
|
+
|
|
102
|
+
Summary
|
|
103
|
+
========================================
|
|
104
|
+
|
|
105
|
+
Checks run: 3
|
|
106
|
+
Checks passed: 3
|
|
107
|
+
Checks failed: 0
|
|
108
|
+
|
|
109
|
+
PASSED - All checks passed
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Exit codes:
|
|
113
|
+
- `0` - All checks passed (or --skip-check used)
|
|
114
|
+
- `1` - One or more checks failed
|
|
115
|
+
|
|
116
|
+
</output-format>
|
|
117
|
+
|
|
118
|
+
<skip-check>
|
|
119
|
+
|
|
120
|
+
## Emergency Skip
|
|
121
|
+
|
|
122
|
+
Use `--skip-check` only in emergencies:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
./scripts/check.sh --skip-check
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This will:
|
|
129
|
+
- Skip all quality checks
|
|
130
|
+
- Show a warning message
|
|
131
|
+
- Return exit code 0
|
|
132
|
+
|
|
133
|
+
**Use sparingly.** Skipped checks should pass before PR merge.
|
|
134
|
+
|
|
135
|
+
</skip-check>
|
|
136
|
+
|
|
137
|
+
<integration>
|
|
138
|
+
|
|
139
|
+
## dev-handoff Integration
|
|
140
|
+
|
|
141
|
+
The dev-handoff subagent runs `/check` automatically before handoff to Reviewer:
|
|
142
|
+
|
|
143
|
+
1. Dev completes implementation
|
|
144
|
+
2. dev-handoff runs `check.sh`
|
|
145
|
+
3. If checks fail: handoff is blocked
|
|
146
|
+
4. If checks pass: proceed to Reviewer
|
|
147
|
+
|
|
148
|
+
To bypass (emergencies): pass `--skip-check` to dev-handoff.
|
|
149
|
+
|
|
150
|
+
</integration>
|
|
151
|
+
|
|
152
|
+
<reference>
|
|
153
|
+
- **Script:** `pennyfarthing-dist/scripts/check.sh`
|
|
154
|
+
- **Called by:** dev-handoff subagent
|
|
155
|
+
- **Blocks:** Handoff to Reviewer on failure
|
|
156
|
+
</reference>
|