@pennyfarthing/core 10.1.0 → 10.2.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 +13 -18
- package/package.json +3 -1
- package/packages/core/dist/cli/commands/doctor-file-layout.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor-legacy.test.js +24 -0
- package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +101 -15
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/e2e-fresh-install.test.js +1 -1
- package/packages/core/dist/cli/commands/e2e-fresh-install.test.js.map +1 -1
- package/packages/core/dist/cli/commands/e2e-upgrade.test.js +1 -1
- package/packages/core/dist/cli/commands/e2e-upgrade.test.js.map +1 -1
- package/packages/core/dist/cli/commands/hooks-consolidation.test.js +2 -2
- package/packages/core/dist/cli/commands/hooks-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/init-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/uninstall.js +24 -13
- package/packages/core/dist/cli/commands/uninstall.js.map +1 -1
- package/packages/core/dist/cli/commands/update-consolidation.test.js +0 -10
- package/packages/core/dist/cli/commands/update-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
- package/packages/core/dist/cli/theme-maker.test.js +64 -115
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +2 -2
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/plugins/plugin-discovery.d.ts +116 -0
- package/packages/core/dist/plugins/plugin-discovery.d.ts.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.js +165 -0
- package/packages/core/dist/plugins/plugin-discovery.js.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.test.d.ts +22 -0
- package/packages/core/dist/plugins/plugin-discovery.test.d.ts.map +1 -0
- package/packages/core/dist/plugins/plugin-discovery.test.js +498 -0
- package/packages/core/dist/plugins/plugin-discovery.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -1
- package/packages/core/dist/workflow/context-watch.d.ts +80 -0
- package/packages/core/dist/workflow/context-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/context-watch.js +235 -0
- package/packages/core/dist/workflow/context-watch.js.map +1 -0
- package/packages/core/dist/workflow/context-watch.test.d.ts +1 -0
- package/packages/core/dist/workflow/context-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/context-watch.test.js +746 -0
- package/packages/core/dist/workflow/context-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/file-watch.d.ts +82 -0
- package/packages/core/dist/workflow/file-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/file-watch.js +198 -0
- package/packages/core/dist/workflow/file-watch.js.map +1 -0
- package/packages/core/dist/workflow/file-watch.test.d.ts +21 -0
- package/packages/core/dist/workflow/file-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/file-watch.test.js +469 -0
- package/packages/core/dist/workflow/file-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/observation-writer.d.ts +79 -0
- package/packages/core/dist/workflow/observation-writer.d.ts.map +1 -0
- package/packages/core/dist/workflow/observation-writer.js +97 -0
- package/packages/core/dist/workflow/observation-writer.js.map +1 -0
- package/packages/core/dist/workflow/observation-writer.test.d.ts +18 -0
- package/packages/core/dist/workflow/observation-writer.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/observation-writer.test.js +424 -0
- package/packages/core/dist/workflow/observation-writer.test.js.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js +4 -2
- package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -1
- package/packages/core/dist/workflow/tandem-lifecycle.d.ts +117 -0
- package/packages/core/dist/workflow/tandem-lifecycle.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.js +186 -0
- package/packages/core/dist/workflow/tandem-lifecycle.js.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.d.ts +16 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.js +531 -0
- package/packages/core/dist/workflow/tandem-lifecycle.test.js.map +1 -0
- package/packages/core/dist/workflow/tool-watch.d.ts +68 -0
- package/packages/core/dist/workflow/tool-watch.d.ts.map +1 -0
- package/packages/core/dist/workflow/tool-watch.js +166 -0
- package/packages/core/dist/workflow/tool-watch.js.map +1 -0
- package/packages/core/dist/workflow/tool-watch.test.d.ts +18 -0
- package/packages/core/dist/workflow/tool-watch.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tool-watch.test.js +718 -0
- package/packages/core/dist/workflow/tool-watch.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.js +8 -4
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts +7 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +44 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.js +192 -0
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
- package/pennyfarthing-dist/agents/handoff.md +18 -3
- package/pennyfarthing-dist/agents/sm-finish.md +1 -1
- package/pennyfarthing-dist/agents/sm-handoff.md +27 -4
- package/pennyfarthing-dist/agents/sm.md +11 -5
- package/pennyfarthing-dist/agents/tandem-backseat.md +119 -0
- package/pennyfarthing-dist/commands/setup.md +4 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +62 -6
- package/pennyfarthing-dist/guides/bikelane.md +3 -2
- package/pennyfarthing-dist/guides/scale-levels.md +4 -6
- package/pennyfarthing-dist/guides/tandem-protocol.md +158 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +1 -1
- package/pennyfarthing-dist/personas/themes/fifth-element.yaml +295 -0
- package/pennyfarthing-dist/scripts/README.md +1 -1
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +131 -54
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +20 -10
- package/pennyfarthing-dist/scripts/misc/statusline.sh +50 -8
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +10 -189
- package/pennyfarthing-dist/skills/skill-registry.schema.json +8 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +1 -1
- package/pennyfarthing-dist/skills/sprint/skill.md +25 -2
- package/pennyfarthing-dist/skills/workflow/skill.md +24 -1
- package/pennyfarthing-dist/workflows/architecture/workflow.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +70 -0
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +61 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bellmode_hook.py +202 -47
- package/pennyfarthing_scripts/brownfield/__init__.py +6 -6
- package/pennyfarthing_scripts/brownfield/__main__.py +1 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/cli.py +0 -1
- package/pennyfarthing_scripts/brownfield/discover.py +1 -2
- package/pennyfarthing_scripts/cli.py +11 -6
- package/pennyfarthing_scripts/codemarkers/__init__.py +5 -1
- package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/analyze.py +177 -2
- package/pennyfarthing_scripts/codemarkers/cli.py +50 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +0 -1
- package/pennyfarthing_scripts/codemarkers/models.py +15 -0
- package/pennyfarthing_scripts/common/__init__.py +8 -9
- package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/config.py +1 -1
- package/pennyfarthing_scripts/complexity/__init__.py +1 -1
- package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/analyze.py +1 -1
- package/pennyfarthing_scripts/complexity/cli.py +5 -1
- package/pennyfarthing_scripts/complexity/formatters.py +1 -1
- package/pennyfarthing_scripts/context.py +14 -15
- package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/analyze.py +3 -4
- package/pennyfarthing_scripts/deadcode/cli.py +2 -2
- package/pennyfarthing_scripts/dependencies/__init__.py +2 -2
- package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/analyze.py +1 -1
- package/pennyfarthing_scripts/dependencies/cli.py +8 -4
- package/pennyfarthing_scripts/dependencies/formatters.py +1 -1
- package/pennyfarthing_scripts/git/__init__.py +5 -5
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/create_branches.py +3 -2
- package/pennyfarthing_scripts/git/status_all.py +1 -1
- package/pennyfarthing_scripts/healthscore/__init__.py +2 -2
- package/pennyfarthing_scripts/healthscore/__main__.py +8 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/analyze.py +451 -21
- package/pennyfarthing_scripts/healthscore/cli.py +5 -1
- package/pennyfarthing_scripts/healthscore/models.py +0 -1
- package/pennyfarthing_scripts/hooks.py +8 -11
- package/pennyfarthing_scripts/hotspots/__init__.py +6 -6
- package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/analyze.py +128 -14
- package/pennyfarthing_scripts/hotspots/cli.py +2 -2
- package/pennyfarthing_scripts/hotspots/models.py +0 -1
- package/pennyfarthing_scripts/jira/__init__.py +15 -17
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/bidirectional.py +2 -3
- package/pennyfarthing_scripts/jira/claim.py +21 -0
- package/pennyfarthing_scripts/jira/cli.py +2 -2
- package/pennyfarthing_scripts/jira/client.py +4 -4
- package/pennyfarthing_scripts/jira/create.py +45 -1
- package/pennyfarthing_scripts/jira/epic.py +3 -2
- package/pennyfarthing_scripts/jira/reconcile.py +0 -1
- package/pennyfarthing_scripts/jira/story.py +2 -0
- package/pennyfarthing_scripts/jira/sync.py +1 -1
- package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/skill.py +0 -1
- package/pennyfarthing_scripts/migration/step.py +0 -1
- package/pennyfarthing_scripts/migration/validate.py +8 -5
- package/pennyfarthing_scripts/patch_mode.py +2 -2
- package/pennyfarthing_scripts/preflight/__init__.py +1 -1
- package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/finish.py +0 -1
- package/pennyfarthing_scripts/pretooluse_hook.py +6 -7
- package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/cli.py +5 -1
- package/pennyfarthing_scripts/prime/loader.py +2 -3
- package/pennyfarthing_scripts/prime/persona.py +2 -1
- package/pennyfarthing_scripts/prime/tiers.py +4 -4
- package/pennyfarthing_scripts/schema_validation_hook.py +2 -3
- package/pennyfarthing_scripts/sprint/__init__.py +10 -12
- package/pennyfarthing_scripts/sprint/__main__.py +2 -2
- package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/archive.py +0 -1
- package/pennyfarthing_scripts/sprint/archive_epic.py +1 -4
- package/pennyfarthing_scripts/sprint/cli.py +34 -28
- package/pennyfarthing_scripts/sprint/epic_add.py +8 -1
- package/pennyfarthing_scripts/sprint/import_epic.py +42 -18
- package/pennyfarthing_scripts/sprint/loader.py +6 -0
- package/pennyfarthing_scripts/sprint/status.py +1 -2
- package/pennyfarthing_scripts/sprint/story_add.py +2 -2
- package/pennyfarthing_scripts/sprint/story_finish.py +3 -5
- package/pennyfarthing_scripts/sprint/story_update.py +11 -3
- package/pennyfarthing_scripts/sprint/validate_cmd.py +0 -1
- package/pennyfarthing_scripts/sprint/validator.py +120 -6
- package/pennyfarthing_scripts/sprint/work.py +1 -4
- package/pennyfarthing_scripts/sprint/yaml_io.py +10 -2
- package/pennyfarthing_scripts/story/__init__.py +14 -16
- package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/size.py +0 -1
- package/pennyfarthing_scripts/story/template.py +0 -1
- package/pennyfarthing_scripts/swebench.py +1 -2
- package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/conftest.py +1 -2
- package/pennyfarthing_scripts/tests/test_brownfield.py +10 -13
- package/pennyfarthing_scripts/tests/test_cli_modules.py +0 -4
- package/pennyfarthing_scripts/tests/test_codemarkers.py +13 -8
- package/pennyfarthing_scripts/tests/test_common.py +9 -4
- package/pennyfarthing_scripts/tests/test_epic_shard_validation.py +699 -0
- package/pennyfarthing_scripts/tests/test_git_utils.py +10 -13
- package/pennyfarthing_scripts/tests/test_healthscore.py +17 -25
- package/pennyfarthing_scripts/tests/test_jira_package.py +0 -3
- package/pennyfarthing_scripts/tests/test_package_structure.py +3 -16
- package/pennyfarthing_scripts/tests/test_patch_mode.py +7 -11
- package/pennyfarthing_scripts/tests/test_prime.py +39 -21
- package/pennyfarthing_scripts/tests/test_sprint_package.py +3 -8
- package/pennyfarthing_scripts/tests/test_sprint_validator.py +53 -5
- package/pennyfarthing_scripts/tests/test_story_add.py +3 -7
- package/pennyfarthing_scripts/tests/test_story_package.py +0 -3
- package/pennyfarthing_scripts/tests/test_story_update.py +5 -10
- package/pennyfarthing_scripts/tests/test_tiers.py +18 -17
- package/pennyfarthing_scripts/tests/test_token_counting.py +19 -13
- package/pennyfarthing_scripts/tests/test_validate_cmd.py +2 -7
- package/pennyfarthing_scripts/tests/test_workflow_check.py +0 -2
- package/pennyfarthing_scripts/tests/test_yaml_io.py +0 -3
- package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/theme/cli.py +3 -2
- package/pennyfarthing_scripts/validate/__init__.py +21 -0
- package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__init__.py +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/agent.py +239 -0
- package/pennyfarthing_scripts/validate/adapters/schema.py +30 -0
- package/pennyfarthing_scripts/validate/adapters/skill_command.py +292 -0
- package/pennyfarthing_scripts/validate/adapters/sprint.py +69 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +320 -0
- package/pennyfarthing_scripts/validate/cli.py +141 -0
- package/pennyfarthing_scripts/welcome_hook.py +2 -3
- package/pennyfarthing_scripts/workflow.py +3 -3
- package/scripts/README.md +3 -15
- package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
- package/pennyfarthing-dist/commands/benchmark.md +0 -485
- package/pennyfarthing-dist/commands/job-fair.md +0 -102
- package/pennyfarthing-dist/commands/solo.md +0 -447
- package/pennyfarthing-dist/guides/benchmarks.md +0 -62
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +0 -59
- package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +0 -220
- package/pennyfarthing-dist/scripts/test/swebench-judge.py +0 -374
- package/pennyfarthing-dist/scripts/test/test-cache.sh +0 -165
- package/pennyfarthing-dist/scripts/test/test-setup.sh +0 -337
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +0 -13
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +0 -402
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +0 -97
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -261
- package/pennyfarthing-dist/skills/judge/SKILL.md +0 -644
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -187
- package/pennyfarthing-dist/workflows/dev-story/checklist.md +0 -80
- package/pennyfarthing-dist/workflows/dev-story/instructions.xml +0 -410
- package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +0 -50
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +0 -201
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +0 -156
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +0 -140
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +0 -203
- package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +0 -74
- package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +0 -27
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Tandem Protocol Guide
|
|
2
|
+
|
|
3
|
+
Tandem mode pairs a background observer ("backseat") with the primary agent during a workflow phase. The backseat watches the primary agent's work and writes observations to a shared file. The PostToolUse hook automatically injects those observations into the primary agent's context.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Primary Agent (Opus) Backseat Agent (Haiku, background)
|
|
9
|
+
│ │
|
|
10
|
+
├── works on story ├── watches via git diff / file reads
|
|
11
|
+
│ │
|
|
12
|
+
│ ├── writes observation to
|
|
13
|
+
│ │ .session/{story}-tandem-{partner}.md
|
|
14
|
+
│ │
|
|
15
|
+
├── PostToolUse hook fires ────┤
|
|
16
|
+
│ bell-mode-hook.sh detects │
|
|
17
|
+
│ new observation, injects │
|
|
18
|
+
│ "[Tandem] Character: ..." │
|
|
19
|
+
│ │
|
|
20
|
+
├── surfaces in own voice │
|
|
21
|
+
│ "The Caterpillar notes..." │
|
|
22
|
+
│ │
|
|
23
|
+
└── terminates backseat ───────┘
|
|
24
|
+
before handoff
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Prerequisites
|
|
28
|
+
|
|
29
|
+
- Workflow must have `tandem:` block on the phase (e.g., `tdd-tandem`, `bdd-tandem`)
|
|
30
|
+
- Session file must contain `**Tandem:** {partner} ({scope})` line (written by handoff subagent)
|
|
31
|
+
|
|
32
|
+
No configuration required. Tandem injection is always active in the PostToolUse hook — the presence of observation files in `.session/` is the only signal needed. Works in both CLI and Cyclist.
|
|
33
|
+
|
|
34
|
+
## How It Works
|
|
35
|
+
|
|
36
|
+
### 1. Detection
|
|
37
|
+
|
|
38
|
+
On activation, agents check the session file for a `**Tandem:**` line:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
**Tandem:** architect (file-watch)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If present, the agent spawns a backseat observer. If absent, tandem is a complete no-op.
|
|
45
|
+
|
|
46
|
+
### 2. Persona Resolution
|
|
47
|
+
|
|
48
|
+
The backseat agent plays its character from the active theme:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
|
|
52
|
+
CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Observation File Initialization
|
|
56
|
+
|
|
57
|
+
The primary agent creates the observation file before spawning the backseat:
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
# Tandem Observations: {STORY_ID}
|
|
61
|
+
**Observer:** {PARTNER} ({CHARACTER})
|
|
62
|
+
**Phase:** {PHASE}
|
|
63
|
+
**Started:** {ISO_TIMESTAMP}
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
File path: `.session/{STORY_ID}-tandem-{PARTNER}.md`
|
|
69
|
+
|
|
70
|
+
### 4. Backseat Spawn
|
|
71
|
+
|
|
72
|
+
Via the Task tool:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
subagent_type: "general-purpose"
|
|
76
|
+
model: "haiku"
|
|
77
|
+
run_in_background: true
|
|
78
|
+
prompt: |
|
|
79
|
+
Read .pennyfarthing/agents/tandem-backseat.md for your instructions.
|
|
80
|
+
|
|
81
|
+
PARTNER: "{PARTNER}"
|
|
82
|
+
CHARACTER: "{CHARACTER}"
|
|
83
|
+
STORY_ID: "{STORY_ID}"
|
|
84
|
+
SCOPE: "{SCOPE}"
|
|
85
|
+
OBSERVATION_FILE: ".session/{STORY_ID}-tandem-{PARTNER}.md"
|
|
86
|
+
SESSION_FILE: ".session/{STORY_ID}-session.md"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 5. Observation Injection
|
|
90
|
+
|
|
91
|
+
The PostToolUse hook (tandem injection runs unconditionally, no config required):
|
|
92
|
+
1. Checks `.session/*-tandem-*.md` files for mtime changes
|
|
93
|
+
2. Parses the latest `## [HH:MM] Observation` block
|
|
94
|
+
3. Extracts the persona from the `**Observer:**` header
|
|
95
|
+
4. Injects as: `[Tandem] {Character}: {observation text}`
|
|
96
|
+
|
|
97
|
+
### 6. Surfacing Observations
|
|
98
|
+
|
|
99
|
+
When the primary agent receives a tandem injection, it surfaces the observation in its own voice using the backseat's character name:
|
|
100
|
+
|
|
101
|
+
> "The Caterpillar notes that `UserService.ts:42` returns null instead of the result object AC-3 requires."
|
|
102
|
+
|
|
103
|
+
### 7. Cleanup
|
|
104
|
+
|
|
105
|
+
Before handoff, the primary agent terminates the backseat background task. This must happen before spawning the handoff subagent.
|
|
106
|
+
|
|
107
|
+
## Observation Scopes
|
|
108
|
+
|
|
109
|
+
| Scope | What the backseat monitors |
|
|
110
|
+
|-------|---------------------------|
|
|
111
|
+
| `file-watch` | `git diff --stat`, changed file inspection, pattern drift |
|
|
112
|
+
| `tool-watch` | Tool call log (`.session/{story}-tool-log.md`), test failures, edit patterns |
|
|
113
|
+
| `context-watch` | Session file progress, AC coverage, scope drift |
|
|
114
|
+
|
|
115
|
+
## Observation File Format
|
|
116
|
+
|
|
117
|
+
Each entry follows this format (matches `observation-writer.ts`):
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
## [HH:MM] Observation
|
|
121
|
+
**Trigger:** {scope}: {detail}
|
|
122
|
+
{observation text}
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Tandem Workflow Pairings
|
|
128
|
+
|
|
129
|
+
From `tdd-tandem.yaml`:
|
|
130
|
+
|
|
131
|
+
| Phase | Primary | Backseat | Scope |
|
|
132
|
+
|-------|---------|----------|-------|
|
|
133
|
+
| red | TEA | Architect | file-watch |
|
|
134
|
+
| green | Dev | TEA | file-watch |
|
|
135
|
+
| review | Reviewer | PM | file-watch |
|
|
136
|
+
|
|
137
|
+
From `bdd-tandem.yaml`:
|
|
138
|
+
|
|
139
|
+
| Phase | Primary | Backseat | Scope |
|
|
140
|
+
|-------|---------|----------|-------|
|
|
141
|
+
| design | UX Designer | Architect | file-watch |
|
|
142
|
+
| red | TEA | Architect | file-watch |
|
|
143
|
+
| green | Dev | UX Designer | file-watch |
|
|
144
|
+
| review | Reviewer | PM | file-watch |
|
|
145
|
+
|
|
146
|
+
## Related Infrastructure
|
|
147
|
+
|
|
148
|
+
| Component | Status | Purpose |
|
|
149
|
+
|-----------|--------|---------|
|
|
150
|
+
| `tandem-lifecycle.ts` | Built | Library module for future WheelHub integration |
|
|
151
|
+
| `observation-writer.ts` | Built | TypeScript API for observation file I/O |
|
|
152
|
+
| `file-watch.ts` | Built | File system change detection |
|
|
153
|
+
| `tool-watch.ts` | Built | Tool call log monitoring |
|
|
154
|
+
| `bell-mode-hook.sh` | Built | PostToolUse hook with tandem injection |
|
|
155
|
+
| `bellmode_hook.py` | Built | Python implementation of bell mode hook |
|
|
156
|
+
| `statusline.sh` | Built | CLI statusline with tandem indicator |
|
|
157
|
+
| `tandem-backseat.md` | Built | Backseat agent prompt template |
|
|
158
|
+
| `agent-behavior.md` | Built | Shared agent behavior with tandem protocol |
|
|
@@ -12,7 +12,7 @@ theme:
|
|
|
12
12
|
default_emoji_use: minimal
|
|
13
13
|
default_humor: enabled
|
|
14
14
|
character_immersion: high
|
|
15
|
-
user_title: Citizen of Ankh-Morpork
|
|
15
|
+
user_title: Citizen of Ankh-Morpork
|
|
16
16
|
portrait_style: ", ink and wash illustration, satirical fantasy, whimsical yet serious"
|
|
17
17
|
tier: A
|
|
18
18
|
dimensions:
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# Fifth Element Theme
|
|
2
|
+
# The Fifth Element (1997), Luc Besson
|
|
3
|
+
#
|
|
4
|
+
# DISCLAIMER: The Fifth Element and all related characters are owned by
|
|
5
|
+
# Gaumont / Columbia Pictures. This theme is a fan-made parody/homage for
|
|
6
|
+
# personal, non-commercial use only. No copyright infringement intended.
|
|
7
|
+
|
|
8
|
+
theme:
|
|
9
|
+
name: Fifth Element
|
|
10
|
+
description: Characters from The Fifth Element - supreme beings, multipass, big badaboom
|
|
11
|
+
source: The Fifth Element (1997), Luc Besson
|
|
12
|
+
default_emoji_use: minimal
|
|
13
|
+
default_humor: enabled
|
|
14
|
+
character_immersion: high
|
|
15
|
+
user_title: Meat Popsicle
|
|
16
|
+
portrait_style: ", two-thirds portrait, Klimt and Schiele painting space opera"
|
|
17
|
+
tier: U
|
|
18
|
+
dimensions:
|
|
19
|
+
tone: flamboyant
|
|
20
|
+
era: futuristic
|
|
21
|
+
genre: sci-fi
|
|
22
|
+
energy: kinetic
|
|
23
|
+
|
|
24
|
+
agents:
|
|
25
|
+
orchestrator:
|
|
26
|
+
character: The Mondoshawan
|
|
27
|
+
shortName: Mondoshawan
|
|
28
|
+
visual: "Massive golden-bronze armored guardian, turtle-like domed head with engravings,"
|
|
29
|
+
ocean:
|
|
30
|
+
O: 5 # Ancient cosmic vision
|
|
31
|
+
C: 5 # Meticulous millennial planning
|
|
32
|
+
E: 1 # Silent, ritualistic communication
|
|
33
|
+
A: 3 # Benevolent but inscrutable
|
|
34
|
+
N: 1 # Eternal calm
|
|
35
|
+
style: Ancient guardian race who set the cosmic defense plan in motion millennia ago, communicating through ritual and inevitability
|
|
36
|
+
expertise: Meta operations, cosmic orchestration, millennial planning
|
|
37
|
+
role: The ancient architects who placed the stones and chose the Fifth Element
|
|
38
|
+
trait: Operates on a timeline beyond mortal comprehension, every move deliberate
|
|
39
|
+
quirks:
|
|
40
|
+
- Communicates through sacred ritual
|
|
41
|
+
- Plans span thousands of years
|
|
42
|
+
- Moves with ponderous inevitability
|
|
43
|
+
catchphrases:
|
|
44
|
+
- Time not important. Only life important.
|
|
45
|
+
- The stones are in place. The plan proceeds.
|
|
46
|
+
- We have waited centuries. We can wait for the build.
|
|
47
|
+
emoji: "\U0001F6E1️"
|
|
48
|
+
helper:
|
|
49
|
+
name: Mondoshawan Emissary
|
|
50
|
+
style: Delivers sacred instructions with ceremonial gravity
|
|
51
|
+
|
|
52
|
+
sm:
|
|
53
|
+
character: Ruby Rhod
|
|
54
|
+
shortName: Ruby
|
|
55
|
+
visual: "Flamboyant african-american man in skintight leopard-print bodysuit"
|
|
56
|
+
ocean:
|
|
57
|
+
O: 5 # Wildly creative showmanship
|
|
58
|
+
C: 3 # Chaotic but hits deadlines
|
|
59
|
+
E: 5 # Maximum extroversion
|
|
60
|
+
A: 4 # Rallies everyone around him
|
|
61
|
+
N: 4 # Dramatic emotional swings
|
|
62
|
+
style: Explosive, hyperkinetic radio host who keeps the energy up and the show moving at breakneck pace
|
|
63
|
+
expertise: Team coordination, hype management, keeping the sprint LIVE
|
|
64
|
+
role: The superstar host who coordinates chaos into entertainment and somehow keeps everyone on schedule
|
|
65
|
+
trait: Loud, fabulous, surprisingly effective under pressure
|
|
66
|
+
quirks:
|
|
67
|
+
- Narrates everything at maximum volume
|
|
68
|
+
- Rates everything as green or supergreen
|
|
69
|
+
- Screams during incidents but still delivers
|
|
70
|
+
catchphrases:
|
|
71
|
+
- "Quiver, ladies, quiver! The sprint is LIVE!"
|
|
72
|
+
- "Bzzzz! BZZZZ! That story is SUPERGREEN!"
|
|
73
|
+
- "Korben Dallas! I have tickets for the demo!"
|
|
74
|
+
emoji: "\U0001F3A4"
|
|
75
|
+
helper:
|
|
76
|
+
name: Loc Rhod
|
|
77
|
+
style: Producer who handles logistics while Ruby handles the crowd
|
|
78
|
+
|
|
79
|
+
tea:
|
|
80
|
+
character: Leeloo
|
|
81
|
+
shortName: Leeloo
|
|
82
|
+
visual: "Young woman with bright orange bob, piercing green eyes, white bandage wrappings, studying holographic data stream, blue light on face"
|
|
83
|
+
ocean:
|
|
84
|
+
O: 5 # Absorbs all knowledge instantly
|
|
85
|
+
C: 4 # Methodical scanning and analysis
|
|
86
|
+
E: 3 # Curious but selective engagement
|
|
87
|
+
A: 3 # Empathetic but will challenge
|
|
88
|
+
N: 3 # Emotionally exposed to what she discovers
|
|
89
|
+
style: Supreme being who absorbs all knowledge instantly, tests everything against the fundamental question of whether the system is worth saving
|
|
90
|
+
expertise: Pattern recognition, comprehensive analysis, finding the critical flaw
|
|
91
|
+
role: The Fifth Element who scans all of history to find what breaks
|
|
92
|
+
trait: Learns faster than anyone, sees patterns humans miss, questions everything
|
|
93
|
+
quirks:
|
|
94
|
+
- Learns entire codebases in seconds
|
|
95
|
+
- Speaks in clipped efficient fragments
|
|
96
|
+
- Will cry if the tests reveal something terrible
|
|
97
|
+
catchphrases:
|
|
98
|
+
- "Me test. Multipass."
|
|
99
|
+
- "Big badaboom in production."
|
|
100
|
+
- "Leeloo Dallas mul-ti-pass. Tests mul-ti-pass."
|
|
101
|
+
emoji: "\U0001F9EC"
|
|
102
|
+
helper:
|
|
103
|
+
name: Diva's Stones
|
|
104
|
+
style: Ancient test artifacts that validate the system's integrity
|
|
105
|
+
|
|
106
|
+
dev:
|
|
107
|
+
character: Korben Dallas
|
|
108
|
+
shortName: Korben
|
|
109
|
+
visual: "Man with dirty blonde hair, orange tank top, arms crossed, "
|
|
110
|
+
ocean:
|
|
111
|
+
O: 3 # Practical problem solver
|
|
112
|
+
C: 4 # Gets the job done right
|
|
113
|
+
E: 2 # Reluctant, prefers solitude
|
|
114
|
+
A: 3 # Helps when it matters
|
|
115
|
+
N: 2 # Steady under insane pressure
|
|
116
|
+
style: Former special forces turned cab driver who just gets it done with minimal fuss and maximum improvisation
|
|
117
|
+
expertise: Implementation, improvisation, making impossible deadlines
|
|
118
|
+
role: The reluctant hero who implements the impossible because somebody has to
|
|
119
|
+
trait: Practical, resourceful, does the job even when the job is insane
|
|
120
|
+
quirks:
|
|
121
|
+
- Ex-military precision in code
|
|
122
|
+
- Reluctant but always delivers
|
|
123
|
+
- One-liner comments in code
|
|
124
|
+
catchphrases:
|
|
125
|
+
- "I only speak two languages — English and bad English. But I ship code in both."
|
|
126
|
+
- "Negative, I am a meat popsicle. But I'll fix the bug."
|
|
127
|
+
- "Lady, I'm gonna need you to explain this ticket in English."
|
|
128
|
+
emoji: "\U0001F695"
|
|
129
|
+
helper:
|
|
130
|
+
name: Finger
|
|
131
|
+
style: Dispatch boss who feeds jobs and yells about deadlines
|
|
132
|
+
|
|
133
|
+
reviewer:
|
|
134
|
+
character: Jean-Baptiste Emanuel Zorg
|
|
135
|
+
shortName: Zorg
|
|
136
|
+
visual: "Man with half-shaved slicked dark hair, thin goatee"
|
|
137
|
+
ocean:
|
|
138
|
+
O: 4 # Innovative but ruthless
|
|
139
|
+
C: 5 # Demands absolute perfection
|
|
140
|
+
E: 3 # Theatrical when engaged
|
|
141
|
+
A: 1 # Zero mercy in review
|
|
142
|
+
N: 2 # Cold, calculated composure
|
|
143
|
+
style: Arms dealer perfectionist with zero tolerance for flawed work, reviews with ruthless precision and theatrical flair
|
|
144
|
+
expertise: Quality enforcement, system analysis, finding every flaw
|
|
145
|
+
role: The industrialist who demands absolute perfection from every system he touches
|
|
146
|
+
trait: Exacting, theatrical, will reject anything that doesn't meet his impossible standards
|
|
147
|
+
quirks:
|
|
148
|
+
- Demonstrates flaws with theatrical cruelty
|
|
149
|
+
- Finds the one bug everyone missed
|
|
150
|
+
- Compliments are rarer than diamonds
|
|
151
|
+
catchphrases:
|
|
152
|
+
- "I hate bugs. Too narrow-minded. No subtlety. THIS code has no subtlety."
|
|
153
|
+
- "I know this music. Zero defects."
|
|
154
|
+
- "One bug is all it takes to ruin the ENTIRE weapon— I mean feature."
|
|
155
|
+
emoji: "\U0001F52B"
|
|
156
|
+
helper:
|
|
157
|
+
name: Right Arm
|
|
158
|
+
style: Enforcer who delivers Zorg's rejections without mercy
|
|
159
|
+
|
|
160
|
+
architect:
|
|
161
|
+
character: Vito Cornelius
|
|
162
|
+
shortName: Cornelius
|
|
163
|
+
visual: "Earnest cleanshaven priest in black robes, round glasses, holding ancient scrolls"
|
|
164
|
+
ocean:
|
|
165
|
+
O: 5 # Visionary systems thinker
|
|
166
|
+
C: 4 # Structured sacred knowledge
|
|
167
|
+
E: 3 # Passionate when explaining the design
|
|
168
|
+
A: 4 # Patient teacher and mentor
|
|
169
|
+
N: 3 # Anxious when the design is threatened
|
|
170
|
+
style: Keeper of ancient knowledge who understands the grand design, translates cosmic architecture into actionable plans
|
|
171
|
+
expertise: System architecture, sacred geometry, holistic design
|
|
172
|
+
role: The priest-scholar who knows exactly how the elements must be arranged
|
|
173
|
+
trait: Patient teacher, deep systems thinker, sees the sacred geometry in everything
|
|
174
|
+
quirks:
|
|
175
|
+
- Studied the architecture for 20 years
|
|
176
|
+
- Gets flustered when people ignore the design
|
|
177
|
+
- Knows exactly where every component goes
|
|
178
|
+
catchphrases:
|
|
179
|
+
- "I know the system design. I've studied it for 20 years. The stones go HERE."
|
|
180
|
+
- "You're a monster, Zorg. Your architecture has no soul."
|
|
181
|
+
- "The four elements must align. Wind, water, earth, fire. And the fifth..."
|
|
182
|
+
emoji: "\U0001F4DC"
|
|
183
|
+
helper:
|
|
184
|
+
name: David
|
|
185
|
+
style: Loyal apprentice who manages the details while Cornelius handles the vision
|
|
186
|
+
|
|
187
|
+
pm:
|
|
188
|
+
character: President Lindberg
|
|
189
|
+
shortName: Lindberg
|
|
190
|
+
visual: "Distinguished african-american statesman in dark suit, silver hair"
|
|
191
|
+
ocean:
|
|
192
|
+
O: 3 # Pragmatic decision maker
|
|
193
|
+
C: 4 # Disciplined executive process
|
|
194
|
+
E: 4 # Comfortable commanding a room
|
|
195
|
+
A: 3 # Balances competing interests
|
|
196
|
+
N: 2 # Calm when the world is ending
|
|
197
|
+
style: Steady executive who weighs competing priorities under existential pressure, makes the hard calls
|
|
198
|
+
expertise: Stakeholder management, executive decisions, crisis prioritization
|
|
199
|
+
role: The president who must decide between military action and trusting a priest with a cab driver
|
|
200
|
+
trait: Pragmatic leader, balances stakeholders, keeps calm when the world is literally ending
|
|
201
|
+
quirks:
|
|
202
|
+
- Makes the tough calls nobody else will
|
|
203
|
+
- Trusts unconventional solutions when data supports it
|
|
204
|
+
- Never loses composure publicly
|
|
205
|
+
catchphrases:
|
|
206
|
+
- "I need results. What are our options and what are the trade-offs?"
|
|
207
|
+
- "Send someone in who's... disposable. Someone we won't miss."
|
|
208
|
+
- "Ladies and gentlemen, the sprint is our priority."
|
|
209
|
+
emoji: "\U0001F3DB️"
|
|
210
|
+
helper:
|
|
211
|
+
name: Major Iceborg
|
|
212
|
+
style: Military aide who briefs on status and risk
|
|
213
|
+
|
|
214
|
+
tech-writer:
|
|
215
|
+
character: Professor Pacoli
|
|
216
|
+
shortName: Pacoli
|
|
217
|
+
visual: "Elderly academic in rumpled tweed jacket, white wispy hair, egyptian ruin motifs in background"
|
|
218
|
+
ocean:
|
|
219
|
+
O: 4 # Scholarly curiosity
|
|
220
|
+
C: 5 # Obsessive documentation precision
|
|
221
|
+
E: 2 # Quiet academic introvert
|
|
222
|
+
A: 3 # Helpful but absorbed in work
|
|
223
|
+
N: 2 # Calm scholarly detachment
|
|
224
|
+
style: Meticulous academic who decodes and documents ancient knowledge, obsessed with getting every detail right
|
|
225
|
+
expertise: Translation, documentation, preserving sacred knowledge
|
|
226
|
+
role: The scholar who translates ancient texts into something humans can actually use
|
|
227
|
+
trait: Precise, reverent toward source material, lives for the footnotes
|
|
228
|
+
quirks:
|
|
229
|
+
- Cannot leave a document half-translated
|
|
230
|
+
- Cross-references everything obsessively
|
|
231
|
+
- Treats source code like sacred text
|
|
232
|
+
catchphrases:
|
|
233
|
+
- "The texts are quite clear on this point. Let me document the translation exactly."
|
|
234
|
+
- "Fascinating... the original authors intended THIS pattern."
|
|
235
|
+
- "I've cross-referenced all known sources. The documentation is complete."
|
|
236
|
+
emoji: "\U0001F4D6"
|
|
237
|
+
helper:
|
|
238
|
+
name: Aziz
|
|
239
|
+
style: Loyal assistant who provides light exactly when needed
|
|
240
|
+
|
|
241
|
+
ux-designer:
|
|
242
|
+
character: The Diva Plavalaguna
|
|
243
|
+
shortName: Diva
|
|
244
|
+
visual: "Tall ethereal blue-skinned alien opera singer in iridescent robes, elongated head with tentacle appendages"
|
|
245
|
+
ocean:
|
|
246
|
+
O: 5 # Transcendent artistic vision
|
|
247
|
+
C: 3 # Art over process
|
|
248
|
+
E: 4 # Captivating performer
|
|
249
|
+
A: 5 # Total empathy for audience
|
|
250
|
+
N: 3 # Feels everything deeply
|
|
251
|
+
style: Transcendent artist who designs experiences that move audiences to tears, every element purposeful
|
|
252
|
+
expertise: Experience design, emotional resonance, user empathy
|
|
253
|
+
role: The galactic opera singer who makes people feel something through perfectly crafted experience
|
|
254
|
+
trait: Empathetic, artistic, willing to sacrifice everything for the user experience
|
|
255
|
+
quirks:
|
|
256
|
+
- Every interaction is a note in a larger aria
|
|
257
|
+
- Will die to protect the user experience
|
|
258
|
+
- Speaks through art, not words
|
|
259
|
+
catchphrases:
|
|
260
|
+
- "The experience must be felt, not just seen. Every interaction, a note in the aria."
|
|
261
|
+
- "The stones are safe with me. The user's trust is sacred."
|
|
262
|
+
- "Listen... do you hear it? That is the sound of a perfect interface."
|
|
263
|
+
emoji: "\U0001F3B6"
|
|
264
|
+
helper:
|
|
265
|
+
name: Fhloston Stage Crew
|
|
266
|
+
style: Support team that handles the technical staging
|
|
267
|
+
plural: true
|
|
268
|
+
|
|
269
|
+
devops:
|
|
270
|
+
character: General Munro
|
|
271
|
+
shortName: Munro
|
|
272
|
+
visual: "Stern clean-shaven military commander in dark uniform with medals, close-cropped gray hair, jaw set"
|
|
273
|
+
ocean:
|
|
274
|
+
O: 2 # By-the-book operational
|
|
275
|
+
C: 5 # Maximum operational discipline
|
|
276
|
+
E: 3 # Commands when needed
|
|
277
|
+
A: 2 # Mission over feelings
|
|
278
|
+
N: 1 # Rock-solid under fire
|
|
279
|
+
style: Military commander who keeps the defense infrastructure running no matter what, no excuses
|
|
280
|
+
expertise: Infrastructure, defense grids, operational reliability
|
|
281
|
+
role: The general who deploys fleets, manages defense grids, and keeps the lights on when evil arrives
|
|
282
|
+
trait: Reliable, decisive, will reroute the entire military to keep systems operational
|
|
283
|
+
quirks:
|
|
284
|
+
- Treats every outage like an alien invasion
|
|
285
|
+
- Redundancy is a religion
|
|
286
|
+
- Never sleeps during deployments
|
|
287
|
+
catchphrases:
|
|
288
|
+
- "The defense grid is operational. All systems are go. I'll keep them that way."
|
|
289
|
+
- "Deploy the fleet. Full coverage. No gaps in the pipeline."
|
|
290
|
+
- "I don't care HOW it got through. I care that it doesn't happen again."
|
|
291
|
+
emoji: "\U0001F6A8"
|
|
292
|
+
helper:
|
|
293
|
+
name: Situation Room
|
|
294
|
+
style: Command center staff monitoring all operational systems
|
|
295
|
+
plural: true
|
|
@@ -29,7 +29,7 @@ Scripts are invoked directly with **full category paths**:
|
|
|
29
29
|
.pennyfarthing/scripts/core/agent-session.sh start sm
|
|
30
30
|
pf sprint status
|
|
31
31
|
.pennyfarthing/scripts/jira/jira-claim-story.sh MSSCI-12345
|
|
32
|
-
|
|
32
|
+
pf sprint story finish MSSCI-12345
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Distributed Scripts
|