@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,402 +0,0 @@
|
|
|
1
|
-
# TDD Flow Pattern
|
|
2
|
-
|
|
3
|
-
**Pattern Type:** Sequential Handoff Chain
|
|
4
|
-
**Agents Involved:** SM, TEA, Dev, Reviewer
|
|
5
|
-
**Coordination Mechanism:** Session file state machine
|
|
6
|
-
|
|
7
|
-
## Problem Statement
|
|
8
|
-
|
|
9
|
-
Multi-agent development workflows need structured coordination to ensure:
|
|
10
|
-
- Tests are written before implementation (TDD discipline)
|
|
11
|
-
- Code is reviewed before merge (quality gate)
|
|
12
|
-
- State is preserved across agent transitions
|
|
13
|
-
- Error recovery paths are clear
|
|
14
|
-
|
|
15
|
-
Without explicit coordination, agents may:
|
|
16
|
-
- Skip testing entirely
|
|
17
|
-
- Implement without understanding requirements
|
|
18
|
-
- Approve code without thorough review
|
|
19
|
-
- Lose context during handoffs
|
|
20
|
-
|
|
21
|
-
## Solution
|
|
22
|
-
|
|
23
|
-
A linear state machine where each agent:
|
|
24
|
-
1. Receives work in a known state
|
|
25
|
-
2. Performs their specialized role
|
|
26
|
-
3. Transitions to the next state via handoff subagent
|
|
27
|
-
4. Passes control to the next agent
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
SM (setup) → TEA (RED) → Dev (GREEN) → Reviewer (gate) → SM (finish)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Each transition is mediated by a **handoff subagent** that updates the session file, ensuring the next agent has clear context.
|
|
34
|
-
|
|
35
|
-
## State Diagram
|
|
36
|
-
|
|
37
|
-
```mermaid
|
|
38
|
-
stateDiagram-v2
|
|
39
|
-
[*] --> NEW_WORK: /new-work invoked
|
|
40
|
-
|
|
41
|
-
NEW_WORK --> SM_SETUP: User selects story
|
|
42
|
-
SM_SETUP --> TEA_RED: Standard story (3+ pts)
|
|
43
|
-
SM_SETUP --> DEV_GREEN: Trivial story (1-2 pts)
|
|
44
|
-
|
|
45
|
-
TEA_RED --> DEV_GREEN: Tests written (tea-handoff)
|
|
46
|
-
DEV_GREEN --> REVIEW: PR created (dev-handoff)
|
|
47
|
-
|
|
48
|
-
REVIEW --> DEV_GREEN: REJECTED (reviewer-handoff-reject)
|
|
49
|
-
REVIEW --> APPROVED: APPROVED (reviewer-handoff-approve)
|
|
50
|
-
|
|
51
|
-
APPROVED --> FINISH: SM archives story
|
|
52
|
-
FINISH --> [*]: Story complete
|
|
53
|
-
|
|
54
|
-
note right of TEA_RED: RED = Tests fail
|
|
55
|
-
note right of DEV_GREEN: GREEN = Tests pass
|
|
56
|
-
note right of REVIEW: Adversarial review
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### ASCII Alternative
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
63
|
-
│ TDD FLOW STATE MACHINE │
|
|
64
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
65
|
-
|
|
66
|
-
┌──────────┐
|
|
67
|
-
│ NEW_WORK │ ─────────────────────────────────────┐
|
|
68
|
-
└────┬─────┘ │
|
|
69
|
-
│ User selects story │
|
|
70
|
-
▼ │
|
|
71
|
-
┌──────────┐ │
|
|
72
|
-
│ SM_SETUP │ │
|
|
73
|
-
└────┬─────┘ │
|
|
74
|
-
│ │
|
|
75
|
-
├─────────────────┐ │
|
|
76
|
-
│ 3+ pts │ 1-2 pts (skip TEA) │
|
|
77
|
-
▼ │ │
|
|
78
|
-
┌──────────┐ │ │
|
|
79
|
-
│ TEA_RED │ │ │
|
|
80
|
-
│ (tests │ │ │
|
|
81
|
-
│ fail) │ │ │
|
|
82
|
-
└────┬─────┘ │ │
|
|
83
|
-
│ tea-handoff │ │
|
|
84
|
-
▼ ▼ │
|
|
85
|
-
┌───────────────────────┐ │
|
|
86
|
-
│ DEV_GREEN │ ◄───────────────────────┤
|
|
87
|
-
│ (tests pass, PR) │ │
|
|
88
|
-
└──────────┬────────────┘ │
|
|
89
|
-
│ dev-handoff │
|
|
90
|
-
▼ │
|
|
91
|
-
┌──────────────────────┐ │
|
|
92
|
-
│ REVIEW │ │
|
|
93
|
-
│ (adversarial gate) │ │
|
|
94
|
-
└──────────┬───────────┘ │
|
|
95
|
-
│ │
|
|
96
|
-
┌─────┴─────┐ │
|
|
97
|
-
│ │ │
|
|
98
|
-
REJECTED APPROVED │
|
|
99
|
-
│ │ │
|
|
100
|
-
│ ▼ │
|
|
101
|
-
│ ┌──────────┐ │
|
|
102
|
-
│ │ FINISH │ │
|
|
103
|
-
│ │ (archive)│ │
|
|
104
|
-
│ └────┬─────┘ │
|
|
105
|
-
│ │ │
|
|
106
|
-
│ ▼ │
|
|
107
|
-
│ ┌──────────┐ │
|
|
108
|
-
│ │ DONE │ │
|
|
109
|
-
│ └──────────┘ │
|
|
110
|
-
│ │
|
|
111
|
-
└──────────────► DEV_GREEN (fix issues) │
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Implementation
|
|
115
|
-
|
|
116
|
-
### Session File Structure
|
|
117
|
-
|
|
118
|
-
The session file (`.session/{story-id}-session.md`) tracks state:
|
|
119
|
-
|
|
120
|
-
```markdown
|
|
121
|
-
# Story 5-2: Implement Feature X
|
|
122
|
-
|
|
123
|
-
## Story Info
|
|
124
|
-
- Story ID: 5-2
|
|
125
|
-
- Title: Implement Feature X
|
|
126
|
-
- Points: 3
|
|
127
|
-
- Phase: dev # Current phase: sm | tea | dev | review | approved
|
|
128
|
-
- Status: in-progress
|
|
129
|
-
- Repos: pennyfarthing
|
|
130
|
-
- Branch: feature/5-2-implement-feature-x
|
|
131
|
-
|
|
132
|
-
## Workflow
|
|
133
|
-
- [x] Story claimed
|
|
134
|
-
- [x] Session file created
|
|
135
|
-
- [x] TEA: Tests written (RED)
|
|
136
|
-
- [ ] Dev: Implementation complete (GREEN)
|
|
137
|
-
- [ ] Reviewer: Code approved
|
|
138
|
-
- [ ] SM: Story archived
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Phase Transitions
|
|
142
|
-
|
|
143
|
-
| From | To | Trigger | Subagent |
|
|
144
|
-
|------|-----|---------|----------|
|
|
145
|
-
| setup | red | Story setup complete | `generic-sm-setup MODE=setup` + `sm-handoff` |
|
|
146
|
-
| setup | implement | 1-2 pt story (skip TEA) | `generic-sm-setup MODE=setup` + `sm-handoff` |
|
|
147
|
-
| red | green | Tests written, failing | `generic-handoff CURRENT_PHASE=red` |
|
|
148
|
-
| green | review | PR created, tests pass | `generic-handoff CURRENT_PHASE=green` |
|
|
149
|
-
| review | implement | Issues found | `generic-handoff VERDICT=rejected` |
|
|
150
|
-
| review | approved | No blocking issues | `generic-handoff VERDICT=approved` |
|
|
151
|
-
| approved | done | Story archived | `generic-sm-finish PHASE=execute` |
|
|
152
|
-
|
|
153
|
-
### Agent Responsibilities
|
|
154
|
-
|
|
155
|
-
#### SM (Scrum Master)
|
|
156
|
-
**Entry:** `/new-work` command
|
|
157
|
-
**Role:** Story selection, context creation, finish workflow
|
|
158
|
-
**Files:** `agents/sm.md`
|
|
159
|
-
|
|
160
|
-
Key behaviors:
|
|
161
|
-
- Spawns `workflow-status-check` to detect current state
|
|
162
|
-
- Creates story context with technical approach
|
|
163
|
-
- Routes to TEA (standard) or Dev (trivial)
|
|
164
|
-
- Handles finish flow when story approved
|
|
165
|
-
|
|
166
|
-
```yaml
|
|
167
|
-
# SM routing decision
|
|
168
|
-
| Points | Scale | Route |
|
|
169
|
-
|--------|-------|-------|
|
|
170
|
-
| 1-2 pts | Trivial | SM → Dev (skip TEA) |
|
|
171
|
-
| 3-5 pts | Standard | SM → TEA → Dev |
|
|
172
|
-
| 8+ pts | Complex | SM → TEA → Dev |
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
#### TEA (Test Engineer/Architect)
|
|
176
|
-
**Entry:** Handoff from SM
|
|
177
|
-
**Role:** Write failing tests (RED phase)
|
|
178
|
-
**Files:** `agents/tea.md`
|
|
179
|
-
|
|
180
|
-
Key behaviors:
|
|
181
|
-
- Analyzes acceptance criteria for testability
|
|
182
|
-
- Writes tests that FAIL (RED state)
|
|
183
|
-
- May bypass tests for documentation/config changes
|
|
184
|
-
- Spawns `tea-handoff` to update session
|
|
185
|
-
|
|
186
|
-
```markdown
|
|
187
|
-
## TEA Assessment
|
|
188
|
-
**Tests Required:** Yes
|
|
189
|
-
**Test Files:**
|
|
190
|
-
- `internal/service/feature_test.go` - Unit tests for feature logic
|
|
191
|
-
**Tests Written:** 4 tests covering 3 ACs
|
|
192
|
-
**Status:** RED (failing - ready for Dev)
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
#### Dev (Developer)
|
|
196
|
-
**Entry:** Handoff from TEA (or SM for trivial)
|
|
197
|
-
**Role:** Implement code to pass tests (GREEN phase)
|
|
198
|
-
**Files:** `agents/dev.md`
|
|
199
|
-
|
|
200
|
-
Key behaviors:
|
|
201
|
-
- Implements minimal code to pass tests
|
|
202
|
-
- Follows RED → GREEN → Refactor cycle
|
|
203
|
-
- Creates PR with clear description
|
|
204
|
-
- Spawns `dev-handoff` to update session
|
|
205
|
-
|
|
206
|
-
```markdown
|
|
207
|
-
## Dev Assessment
|
|
208
|
-
**Implementation Complete:** Yes
|
|
209
|
-
**Files Changed:**
|
|
210
|
-
- `internal/service/feature.go` - Core implementation
|
|
211
|
-
**Tests:** 4/4 passing (GREEN)
|
|
212
|
-
**PR:** #42 - Implement feature X
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
#### Reviewer (Code Reviewer)
|
|
216
|
-
**Entry:** Handoff from Dev
|
|
217
|
-
**Role:** Adversarial code review (quality gate)
|
|
218
|
-
**Files:** `agents/reviewer.md`
|
|
219
|
-
|
|
220
|
-
Key behaviors:
|
|
221
|
-
- Spawns `reviewer-preflight` for mechanical checks
|
|
222
|
-
- Performs security, edge case, and performance analysis
|
|
223
|
-
- Makes APPROVE/REJECT judgment
|
|
224
|
-
- Routes back to Dev (reject) or SM (approve)
|
|
225
|
-
|
|
226
|
-
```markdown
|
|
227
|
-
## Reviewer Assessment
|
|
228
|
-
**PR:** #42
|
|
229
|
-
**Verdict:** APPROVED | REJECTED
|
|
230
|
-
|
|
231
|
-
**Code Review Evidence:**
|
|
232
|
-
- **Data flow traced:** userId from request → SQL (parameterized at repo.go:89)
|
|
233
|
-
- **Pattern observed:** Follows existing service pattern
|
|
234
|
-
- **Error handling:** Returns wrapped errors with context
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### Handoff Subagents
|
|
238
|
-
|
|
239
|
-
Each handoff subagent (Haiku model) handles mechanical updates:
|
|
240
|
-
|
|
241
|
-
| Subagent | Purpose | Updates |
|
|
242
|
-
|----------|---------|---------|
|
|
243
|
-
| `tea-handoff` | TEA → Dev transition | Phase, workflow checkboxes, next agent |
|
|
244
|
-
| `dev-handoff` | Dev → Reviewer transition | Phase, PR info, workflow checkboxes |
|
|
245
|
-
| `reviewer-handoff-approve` | Reviewer → SM (finish) | Phase to approved, route to SM |
|
|
246
|
-
| `reviewer-handoff-reject` | Reviewer → Dev (fix) | Phase back to dev, issue summary |
|
|
247
|
-
|
|
248
|
-
Example invocation:
|
|
249
|
-
```yaml
|
|
250
|
-
Task tool:
|
|
251
|
-
subagent_type: "dev-handoff"
|
|
252
|
-
prompt: |
|
|
253
|
-
STORY_ID: 5-2
|
|
254
|
-
REPOS: pennyfarthing
|
|
255
|
-
PR_NUMBER: 42
|
|
256
|
-
TEST_COUNT: 4
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## When to Use
|
|
260
|
-
|
|
261
|
-
**Use TDD Flow when:**
|
|
262
|
-
- Building new features that need testing
|
|
263
|
-
- Implementing stories with clear acceptance criteria
|
|
264
|
-
- Work benefits from structured code review
|
|
265
|
-
|
|
266
|
-
**Skip TEA phase when:**
|
|
267
|
-
- Documentation-only changes
|
|
268
|
-
- Configuration changes
|
|
269
|
-
- Dependency updates
|
|
270
|
-
- Refactoring with existing test coverage
|
|
271
|
-
|
|
272
|
-
**Don't use this pattern for:**
|
|
273
|
-
- Exploratory spikes (use Plan mode instead)
|
|
274
|
-
- Bug fixes (may use abbreviated flow)
|
|
275
|
-
- Emergency hotfixes (direct to main with review)
|
|
276
|
-
|
|
277
|
-
## Error Recovery
|
|
278
|
-
|
|
279
|
-
### Rejection Loop
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
Dev submits PR → Reviewer rejects → Dev fixes → Reviewer re-reviews
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
The rejection loop continues until:
|
|
286
|
-
- All Critical/Major issues are resolved
|
|
287
|
-
- Reviewer approves
|
|
288
|
-
|
|
289
|
-
Session file tracks rejection count and issues.
|
|
290
|
-
|
|
291
|
-
### Missing Epic Context
|
|
292
|
-
|
|
293
|
-
```
|
|
294
|
-
User runs /new-work → workflow-status-check detects no epic context
|
|
295
|
-
→ Returns MISSING_EPIC_CONTEXT state
|
|
296
|
-
→ Blocks until user runs /start-epic
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Context Overflow
|
|
300
|
-
|
|
301
|
-
Each agent checks context usage after completing work:
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
$CLAUDE_PROJECT_DIR/scripts/check-context.sh --human
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
| Context | Action |
|
|
308
|
-
|---------|--------|
|
|
309
|
-
| < 60% | Invoke next agent directly |
|
|
310
|
-
| > 60% | Tell user to start fresh session |
|
|
311
|
-
|
|
312
|
-
This prevents context overflow mid-flow.
|
|
313
|
-
|
|
314
|
-
### Stale Session Recovery
|
|
315
|
-
|
|
316
|
-
If a session file exists but work was interrupted:
|
|
317
|
-
|
|
318
|
-
1. `workflow-status-check` detects `IN_PROGRESS_STATE`
|
|
319
|
-
2. Reports which agent should resume
|
|
320
|
-
3. User decides: continue or abandon
|
|
321
|
-
|
|
322
|
-
### Test Failures in Review
|
|
323
|
-
|
|
324
|
-
If tests fail during review preflight:
|
|
325
|
-
1. Reviewer spawns `testing-runner` subagent
|
|
326
|
-
2. Tests fail → automatic rejection
|
|
327
|
-
3. Routes back to Dev with failure details
|
|
328
|
-
|
|
329
|
-
## Anti-Patterns
|
|
330
|
-
|
|
331
|
-
### Skipping Phases
|
|
332
|
-
|
|
333
|
-
**Wrong:**
|
|
334
|
-
```
|
|
335
|
-
SM → Dev → merge
|
|
336
|
-
```
|
|
337
|
-
Missing TEA means no test discipline. Missing Reviewer means no quality gate.
|
|
338
|
-
|
|
339
|
-
**Correct:**
|
|
340
|
-
```
|
|
341
|
-
SM → TEA → Dev → Reviewer → SM (finish)
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### Rubber-Stamp Reviews
|
|
345
|
-
|
|
346
|
-
**Wrong:**
|
|
347
|
-
```markdown
|
|
348
|
-
Tests pass, lint clean, approved.
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
**Correct:**
|
|
352
|
-
```markdown
|
|
353
|
-
**Data flow traced:** userId from handler.go:47 → repo.go:89 (parameterized)
|
|
354
|
-
**Pattern:** Follows usePresence hook pattern at hooks/usePresence.ts:12
|
|
355
|
-
**Security:** Auth check at handler.go:52 verifies admin role
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
### Skipping Handoff Subagents
|
|
359
|
-
|
|
360
|
-
**Wrong:**
|
|
361
|
-
```
|
|
362
|
-
TEA writes tests → directly tells Dev to continue
|
|
363
|
-
```
|
|
364
|
-
Session file not updated, next agent unclear.
|
|
365
|
-
|
|
366
|
-
**Correct:**
|
|
367
|
-
```
|
|
368
|
-
TEA writes tests → spawns tea-handoff → session updated → Dev activated
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
### Giant PRs
|
|
372
|
-
|
|
373
|
-
**Wrong:**
|
|
374
|
-
```
|
|
375
|
-
Story: 8 pts, 47 files changed, 2000+ lines
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
**Correct:**
|
|
379
|
-
```
|
|
380
|
-
Break into smaller stories (2-3 pts each)
|
|
381
|
-
Each story: 5-15 files, focused changes
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
## Related Patterns
|
|
385
|
-
|
|
386
|
-
- **Helper Delegation Pattern** (`helper-delegation-pattern.md`): How Opus agents delegate mechanical work to Haiku subagents
|
|
387
|
-
- **Approval Gates Pattern** (`approval-gates-pattern.md`): Deep dive on Reviewer approval mechanisms
|
|
388
|
-
- **Fan-out/Fan-in Pattern** (`fan-out-fan-in-pattern.md`): Parallel agent execution
|
|
389
|
-
|
|
390
|
-
## References
|
|
391
|
-
|
|
392
|
-
- SM Agent: `agents/sm.md`
|
|
393
|
-
- TEA Agent: `agents/tea.md`
|
|
394
|
-
- Dev Agent: `agents/dev.md`
|
|
395
|
-
- Reviewer Agent: `agents/reviewer.md`
|
|
396
|
-
- Workflow Status Check: `agents/workflow-status-check.md`
|
|
397
|
-
- Tactical Agent Behavior: `guides/tactical-agent-behavior.md`
|
|
398
|
-
|
|
399
|
-
---
|
|
400
|
-
|
|
401
|
-
*Last verified: 2026-01-06*
|
|
402
|
-
*Pennyfarthing v4.0.0*
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# Permission Request Protocol
|
|
2
|
-
|
|
3
|
-
Defines how agents request runtime permissions and how grants are managed.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Agents may need tool access that wasn't pre-configured. This protocol provides:
|
|
8
|
-
1. Structured format for permission requests
|
|
9
|
-
2. Grant types with different lifetimes
|
|
10
|
-
3. Integration points for UI prompts and persistence
|
|
11
|
-
|
|
12
|
-
## Permission Request Schema
|
|
13
|
-
|
|
14
|
-
```yaml
|
|
15
|
-
permission_request:
|
|
16
|
-
tool: string # Tool name (WebFetch, Bash, Read, Write, etc.)
|
|
17
|
-
reason: string # Human-readable explanation of why access is needed
|
|
18
|
-
scope: string # Scope pattern (URL pattern, command pattern, file glob)
|
|
19
|
-
grant_type: string # "once" | "session" | "always"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Required Fields
|
|
23
|
-
|
|
24
|
-
| Field | Type | Description | Example |
|
|
25
|
-
|-------|------|-------------|---------|
|
|
26
|
-
| `tool` | string | Claude Code tool name | `"WebFetch"`, `"Bash"` |
|
|
27
|
-
| `reason` | string | Why access is needed | `"Fetch API docs from GitHub"` |
|
|
28
|
-
| `scope` | string | What access is needed | `"*.github.com"`, `"npm test"` |
|
|
29
|
-
| `grant_type` | string | How long grant lasts | `"once"`, `"session"`, `"always"` |
|
|
30
|
-
|
|
31
|
-
### Grant Types
|
|
32
|
-
|
|
33
|
-
| Type | Behavior | Storage | Use Case |
|
|
34
|
-
|------|----------|---------|----------|
|
|
35
|
-
| `once` | Single use, cleared after tool call | Memory | One-time operations |
|
|
36
|
-
| `session` | Valid until session ends | Memory | Repeated access during story |
|
|
37
|
-
| `always` | Persisted across sessions | `settings.local.json` | Trusted patterns |
|
|
38
|
-
|
|
39
|
-
## Validation Rules
|
|
40
|
-
|
|
41
|
-
All fields are required and must be non-empty strings. Grant type must be exactly one of: `once`, `session`, `always`.
|
|
42
|
-
|
|
43
|
-
### Valid Request Example
|
|
44
|
-
|
|
45
|
-
```json
|
|
46
|
-
{
|
|
47
|
-
"tool": "WebFetch",
|
|
48
|
-
"reason": "Fetch React documentation for component implementation",
|
|
49
|
-
"scope": "*.reactjs.org",
|
|
50
|
-
"grant_type": "session"
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Invalid Request Examples
|
|
55
|
-
|
|
56
|
-
```json
|
|
57
|
-
// Missing required field
|
|
58
|
-
{ "tool": "WebFetch", "reason": "Need docs" }
|
|
59
|
-
|
|
60
|
-
// Invalid grant_type
|
|
61
|
-
{ "tool": "Bash", "reason": "Run tests", "scope": "npm", "grant_type": "forever" }
|
|
62
|
-
|
|
63
|
-
// Empty string
|
|
64
|
-
{ "tool": "", "reason": "Access", "scope": "*", "grant_type": "once" }
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Permission Grant Structure
|
|
68
|
-
|
|
69
|
-
When a request is approved, a grant is created:
|
|
70
|
-
|
|
71
|
-
```yaml
|
|
72
|
-
permission_grant:
|
|
73
|
-
tool: string # Tool name from request
|
|
74
|
-
scope: string # Scope pattern from request
|
|
75
|
-
grant_type: string # Grant type from request
|
|
76
|
-
granted_at: string # ISO timestamp when granted
|
|
77
|
-
uses_remaining: number # Only for "once" type (starts at 1)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Grant Lifecycle
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
Request → Validate → Prompt User → Create Grant → Tool Executes → Check/Decrement
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
For `once` grants:
|
|
87
|
-
1. Grant created with `uses_remaining: 1`
|
|
88
|
-
2. Tool executes successfully
|
|
89
|
-
3. `uses_remaining` decremented to 0
|
|
90
|
-
4. Grant expired, removed from cache
|
|
91
|
-
|
|
92
|
-
For `session` and `always` grants:
|
|
93
|
-
- No use limit, valid until session ends or revoked
|
|
94
|
-
|
|
95
|
-
## Integration Points
|
|
96
|
-
|
|
97
|
-
### TypeScript Types
|
|
98
|
-
|
|
99
|
-
Import from `@pennyfarthing/core`:
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
import {
|
|
103
|
-
validatePermissionRequest,
|
|
104
|
-
createGrant,
|
|
105
|
-
type PermissionRequest,
|
|
106
|
-
type PermissionGrant,
|
|
107
|
-
type GrantType,
|
|
108
|
-
VALID_GRANT_TYPES,
|
|
109
|
-
} from '@pennyfarthing/core/permissions';
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Session File Tracking
|
|
113
|
-
|
|
114
|
-
Session files can track active grants:
|
|
115
|
-
|
|
116
|
-
```markdown
|
|
117
|
-
## Permissions
|
|
118
|
-
| Tool | Scope | Grant | Granted |
|
|
119
|
-
|------|-------|-------|---------|
|
|
120
|
-
| WebFetch | *.github.com | session | 2026-01-13T10:30:00Z |
|
|
121
|
-
| Bash | npm test | once | 2026-01-13T10:31:00Z |
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Settings Persistence
|
|
125
|
-
|
|
126
|
-
`always` grants persist in `.claude/settings.local.json`:
|
|
127
|
-
|
|
128
|
-
```json
|
|
129
|
-
{
|
|
130
|
-
"permissions": {
|
|
131
|
-
"grants": {
|
|
132
|
-
"WebFetch": ["*.github.com", "*.npmjs.com"],
|
|
133
|
-
"Bash": ["npm *", "git *"]
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## Request Flow
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
┌─────────────────┐
|
|
143
|
-
│ Agent needs │
|
|
144
|
-
│ tool access │
|
|
145
|
-
└────────┬────────┘
|
|
146
|
-
│
|
|
147
|
-
▼
|
|
148
|
-
┌─────────────────┐
|
|
149
|
-
│ Create request │
|
|
150
|
-
│ with protocol │
|
|
151
|
-
└────────┬────────┘
|
|
152
|
-
│
|
|
153
|
-
▼
|
|
154
|
-
┌─────────────────┐ Invalid
|
|
155
|
-
│ Validate │────────────► Reject
|
|
156
|
-
│ request │
|
|
157
|
-
└────────┬────────┘
|
|
158
|
-
│ Valid
|
|
159
|
-
▼
|
|
160
|
-
┌─────────────────┐ Denied
|
|
161
|
-
│ Prompt user │────────────► Block tool
|
|
162
|
-
│ for approval │
|
|
163
|
-
└────────┬────────┘
|
|
164
|
-
│ Approved
|
|
165
|
-
▼
|
|
166
|
-
┌─────────────────┐
|
|
167
|
-
│ Create grant │
|
|
168
|
-
│ per grant_type │
|
|
169
|
-
└────────┬────────┘
|
|
170
|
-
│
|
|
171
|
-
▼
|
|
172
|
-
┌─────────────────┐
|
|
173
|
-
│ Tool executes │
|
|
174
|
-
│ (grant cached) │
|
|
175
|
-
└─────────────────┘
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Related Stories
|
|
179
|
-
|
|
180
|
-
- **33-2**: `/permissions` skill for viewing and managing grants
|
|
181
|
-
- **33-3**: Cyclist UI for permission prompts
|
|
182
|
-
- **33-4**: Spot permission grants (once/session/always implementation)
|
|
183
|
-
- **33-5**: Workflow permission presets
|
|
184
|
-
|
|
185
|
-
## See Also
|
|
186
|
-
|
|
187
|
-
- `AGENT-SCOPES.md` - Agent permission tiers
|
|
188
|
-
- `.claude/project/docs/agent-scopes.yaml` - Active scope configuration
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Persona Loading (For Command Files)
|
|
2
|
-
|
|
3
|
-
This block is included in command files to pre-load the agent's persona before the agent file is read.
|
|
4
|
-
|
|
5
|
-
## Usage in Command Files
|
|
6
|
-
|
|
7
|
-
Add this block BEFORE `<agent-activation>`:
|
|
8
|
-
|
|
9
|
-
```markdown
|
|
10
|
-
<persona-loading agent="{agent-name}">
|
|
11
|
-
Load this agent's persona before activation:
|
|
12
|
-
1. Read `.pennyfarthing/config.local.yaml`
|
|
13
|
-
2. Get `theme` value (e.g., "discworld")
|
|
14
|
-
3. Read `pennyfarthing-dist/personas/themes/{theme}.yaml` (or `.pennyfarthing/personas/themes/`)
|
|
15
|
-
4. Extract `agents.{agent-name}` section (character, style, helper, etc.)
|
|
16
|
-
5. Apply `attributes` from config (verbosity, formality, humor, emoji_use)
|
|
17
|
-
6. Store resolved persona for use during session
|
|
18
|
-
</persona-loading>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## What Gets Resolved
|
|
22
|
-
|
|
23
|
-
From theme file (`agents.{agent-name}`):
|
|
24
|
-
- `character` - The persona name (e.g., "Captain Carrot")
|
|
25
|
-
- `style` - Communication style
|
|
26
|
-
- `expertise` - Domain expertise
|
|
27
|
-
- `helper` - Helper name and style
|
|
28
|
-
- `emoji` - Default emoji
|
|
29
|
-
|
|
30
|
-
From config (`attributes`):
|
|
31
|
-
- `verbosity` - low | medium | high
|
|
32
|
-
- `formality` - formal | casual | playful
|
|
33
|
-
- `humor` - enabled | disabled | subtle
|
|
34
|
-
- `emoji_use` - none | minimal | frequent
|
|
35
|
-
|
|
36
|
-
## Agent File Reference
|
|
37
|
-
|
|
38
|
-
After persona loading, the agent file just needs:
|
|
39
|
-
|
|
40
|
-
```markdown
|
|
41
|
-
## Persona
|
|
42
|
-
|
|
43
|
-
**Fallback:** {brief description if config unavailable}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
The agent receives the resolved persona from the command file's loading step.
|