@pennyfarthing/core 10.0.5 → 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 +19 -22
- package/package.json +17 -11
- 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 +346 -13
- 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/init.d.ts +7 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/init.js +41 -8
- package/packages/core/dist/cli/commands/init.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.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +26 -0
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/index.js +1 -1
- package/packages/core/dist/cli/index.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/cli/utils/python.d.ts +22 -0
- package/packages/core/dist/cli/utils/python.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/python.js +102 -0
- package/packages/core/dist/cli/utils/python.js.map +1 -0
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/settings.js +10 -0
- package/packages/core/dist/cli/utils/settings.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/README.md +1 -3
- package/pennyfarthing-dist/agents/architect.md +0 -6
- package/pennyfarthing-dist/agents/devops.md +0 -6
- package/pennyfarthing-dist/agents/handoff.md +18 -3
- package/pennyfarthing-dist/agents/orchestrator.md +0 -6
- package/pennyfarthing-dist/agents/pm.md +0 -6
- 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 -11
- package/pennyfarthing-dist/agents/tandem-backseat.md +119 -0
- package/pennyfarthing-dist/commands/architect.md +11 -3
- package/pennyfarthing-dist/commands/close-epic.md +24 -131
- package/pennyfarthing-dist/commands/create-theme.md +14 -24
- package/pennyfarthing-dist/commands/dev.md +11 -3
- package/pennyfarthing-dist/commands/devops.md +11 -3
- package/pennyfarthing-dist/commands/health-check.md +1 -3
- package/pennyfarthing-dist/commands/help.md +8 -12
- package/pennyfarthing-dist/commands/list-themes.md +14 -16
- package/pennyfarthing-dist/commands/orchestrator.md +11 -3
- package/pennyfarthing-dist/commands/parallel-work.md +1 -3
- package/pennyfarthing-dist/commands/pm.md +11 -3
- package/pennyfarthing-dist/commands/prime.md +6 -6
- package/pennyfarthing-dist/commands/reviewer.md +11 -3
- package/pennyfarthing-dist/commands/run-ci.md +1 -1
- package/pennyfarthing-dist/commands/set-theme.md +14 -51
- package/pennyfarthing-dist/commands/setup.md +5 -1
- package/pennyfarthing-dist/commands/show-theme.md +14 -16
- package/pennyfarthing-dist/commands/sm.md +11 -3
- package/pennyfarthing-dist/commands/tea.md +11 -3
- package/pennyfarthing-dist/commands/tech-writer.md +11 -3
- package/pennyfarthing-dist/commands/theme-maker.md +14 -671
- package/pennyfarthing-dist/commands/theme.md +95 -0
- package/pennyfarthing-dist/commands/ux-designer.md +11 -3
- package/pennyfarthing-dist/commands/work.md +3 -5
- package/pennyfarthing-dist/guides/agent-behavior.md +62 -6
- package/pennyfarthing-dist/guides/agent-coordination.md +11 -13
- package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
- package/pennyfarthing-dist/guides/bikelane.md +3 -2
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +212 -0
- package/pennyfarthing-dist/guides/hooks.md +5 -5
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +3 -3
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +9 -59
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -5
- package/pennyfarthing-dist/guides/prime.md +2 -2
- package/pennyfarthing-dist/guides/scale-levels.md +4 -6
- package/pennyfarthing-dist/guides/skill-schema.md +4 -4
- 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/core/agent-session.sh +6 -2
- package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
- package/pennyfarthing-dist/scripts/git/release.sh +0 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +131 -54
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +32 -15
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
- package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
- package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
- package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/statusline.sh +50 -8
- package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +0 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
- package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
- package/pennyfarthing-dist/scripts/theme/README.md +1 -1
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +10 -144
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
- package/pennyfarthing-dist/skills/skill-registry.schema.json +8 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +21 -17
- package/pennyfarthing-dist/skills/sprint/skill.md +25 -2
- package/pennyfarthing-dist/skills/story/scripts/create-story.sh +0 -0
- package/pennyfarthing-dist/skills/story/scripts/size-story.sh +0 -0
- package/pennyfarthing-dist/skills/story/scripts/story-template.sh +0 -0
- package/pennyfarthing-dist/skills/theme/skill.md +290 -75
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
- package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/workflow/skill.md +27 -4
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -11
- package/pennyfarthing-dist/templates/auto-load-sm.sh.template +14 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
- package/pennyfarthing-dist/workflows/2party-tdd.yaml +399 -0
- package/pennyfarthing-dist/workflows/architecture/workflow.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +70 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +41 -24
- 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 +23 -3
- package/pennyfarthing_scripts/codemarkers/__init__.py +23 -0
- package/pennyfarthing_scripts/codemarkers/__main__.py +6 -0
- 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 +501 -0
- package/pennyfarthing_scripts/codemarkers/cli.py +179 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +88 -0
- package/pennyfarthing_scripts/codemarkers/models.py +60 -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 +15 -0
- package/pennyfarthing_scripts/complexity/__main__.py +6 -0
- 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 +207 -0
- package/pennyfarthing_scripts/complexity/cli.py +82 -0
- package/pennyfarthing_scripts/complexity/formatters.py +64 -0
- package/pennyfarthing_scripts/complexity/models.py +32 -0
- package/pennyfarthing_scripts/context.py +14 -15
- package/pennyfarthing_scripts/deadcode/__init__.py +6 -0
- package/pennyfarthing_scripts/deadcode/__main__.py +6 -0
- 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 +322 -0
- package/pennyfarthing_scripts/deadcode/cli.py +163 -0
- package/pennyfarthing_scripts/deadcode/formatters.py +106 -0
- package/pennyfarthing_scripts/deadcode/models.py +54 -0
- package/pennyfarthing_scripts/dependencies/__init__.py +20 -0
- package/pennyfarthing_scripts/dependencies/__main__.py +5 -0
- 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 +155 -0
- package/pennyfarthing_scripts/dependencies/cli.py +76 -0
- package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
- package/pennyfarthing_scripts/dependencies/models.py +39 -0
- 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 +21 -0
- package/pennyfarthing_scripts/healthscore/__main__.py +14 -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 +591 -0
- package/pennyfarthing_scripts/healthscore/cli.py +80 -0
- package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
- package/pennyfarthing_scripts/healthscore/models.py +43 -0
- package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- 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 +155 -14
- package/pennyfarthing_scripts/hotspots/cli.py +12 -10
- 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 +44 -18
- package/pennyfarthing_scripts/jira/claim.py +21 -0
- package/pennyfarthing_scripts/jira/cli.py +6 -3
- package/pennyfarthing_scripts/jira/client.py +32 -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 +198 -97
- package/pennyfarthing_scripts/sprint/cli.py +62 -46
- 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 +202 -27
- package/pennyfarthing_scripts/sprint/story_finish.py +209 -0
- 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 +28 -7
- 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 +687 -0
- 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 +516 -0
- 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/__init__.py +5 -0
- package/pennyfarthing_scripts/theme/__main__.py +6 -0
- 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 +287 -0
- 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 +41 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
- 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
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
# story branch is merged and automatically updating the sprint YAML status.
|
|
7
7
|
#
|
|
8
8
|
# Installation:
|
|
9
|
-
#
|
|
9
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
10
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
10
11
|
#
|
|
11
12
|
# Dependencies:
|
|
12
13
|
# - yq (for YAML manipulation)
|
|
@@ -14,11 +15,17 @@
|
|
|
14
15
|
|
|
15
16
|
set -uo pipefail
|
|
16
17
|
|
|
17
|
-
#
|
|
18
|
+
# Find project root
|
|
19
|
+
# Try find-root.sh via symlink resolution first, then fall back to .git location
|
|
18
20
|
REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
|
|
22
|
+
if [[ -f "$FIND_ROOT" ]]; then
|
|
23
|
+
source "$FIND_ROOT"
|
|
24
|
+
else
|
|
25
|
+
# Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
|
|
26
|
+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
|
|
27
|
+
export PROJECT_ROOT
|
|
28
|
+
fi
|
|
22
29
|
SESSION_DIR="$PROJECT_ROOT/.session"
|
|
23
30
|
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
24
31
|
|
|
@@ -40,7 +47,7 @@ extract_story_id() {
|
|
|
40
47
|
|
|
41
48
|
# update_story_status STORY_ID NEW_STATUS
|
|
42
49
|
# Update story status in sprint YAML and add completed date
|
|
43
|
-
#
|
|
50
|
+
# Handles both inline stories in current-sprint.yaml and sharded epic files
|
|
44
51
|
update_story_status() {
|
|
45
52
|
local story_id="$1"
|
|
46
53
|
local new_status="${2:-done}"
|
|
@@ -51,23 +58,33 @@ update_story_status() {
|
|
|
51
58
|
return 1
|
|
52
59
|
fi
|
|
53
60
|
|
|
54
|
-
# Check if yq is available
|
|
55
61
|
if ! command -v yq &>/dev/null; then
|
|
56
62
|
echo "Warning: yq not found, cannot update sprint YAML" >&2
|
|
57
63
|
return 1
|
|
58
64
|
fi
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
local story_num="${story_id#*-}"
|
|
66
|
+
local sprint_dir
|
|
67
|
+
sprint_dir="$(dirname "$SPRINT_FILE")"
|
|
63
68
|
|
|
64
|
-
#
|
|
69
|
+
# Try inline stories in current-sprint.yaml first
|
|
65
70
|
yq eval -i "
|
|
66
|
-
(.
|
|
67
|
-
(.
|
|
68
|
-
" "$SPRINT_FILE"
|
|
71
|
+
(.stories[] | select(.id == \"$story_id\")).status = \"$new_status\" |
|
|
72
|
+
(.stories[] | select(.id == \"$story_id\")).completed = \"$completed_date\"
|
|
73
|
+
" "$SPRINT_FILE" 2>/dev/null
|
|
74
|
+
|
|
75
|
+
# Also try each epic shard file
|
|
76
|
+
for shard in "$sprint_dir"/epic-*.yaml; do
|
|
77
|
+
[[ -f "$shard" ]] || continue
|
|
78
|
+
if yq eval ".stories[] | select(.id == \"$story_id\")" "$shard" 2>/dev/null | grep -q "$story_id"; then
|
|
79
|
+
yq eval -i "
|
|
80
|
+
(.stories[] | select(.id == \"$story_id\")).status = \"$new_status\" |
|
|
81
|
+
(.stories[] | select(.id == \"$story_id\")).completed = \"$completed_date\"
|
|
82
|
+
" "$shard"
|
|
83
|
+
return $?
|
|
84
|
+
fi
|
|
85
|
+
done
|
|
69
86
|
|
|
70
|
-
return
|
|
87
|
+
return 0
|
|
71
88
|
}
|
|
72
89
|
|
|
73
90
|
# log_reconciliation STORY_ID MESSAGE
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
# 3. Validates sprint YAML files when sprint/*.yaml is modified
|
|
9
9
|
#
|
|
10
10
|
# Installation:
|
|
11
|
-
#
|
|
12
|
-
#
|
|
11
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
12
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
13
13
|
|
|
14
14
|
set -uo pipefail
|
|
15
15
|
|
|
@@ -114,7 +114,8 @@ fi
|
|
|
114
114
|
|
|
115
115
|
SPRINT_YAML_FILES=$(git diff --cached --name-only -- 'sprint/*.yaml' 'sprint/archive/*.yaml' 2>/dev/null \
|
|
116
116
|
| grep -v 'sprint-template\.yaml$' \
|
|
117
|
-
| grep -v 'sprint/completed\.yaml$'
|
|
117
|
+
| grep -v 'sprint/completed\.yaml$' \
|
|
118
|
+
| grep -v 'sprint/context/archived/' || true)
|
|
118
119
|
|
|
119
120
|
if [[ -n "$SPRINT_YAML_FILES" ]]; then
|
|
120
121
|
echo "Sprint YAML files staged for commit:"
|
|
File without changes
|
|
@@ -4,15 +4,21 @@
|
|
|
4
4
|
# Checks if sprint files were modified and reminds to sync to Jira.
|
|
5
5
|
#
|
|
6
6
|
# Installation:
|
|
7
|
-
#
|
|
8
|
-
#
|
|
7
|
+
# End-user projects: pennyfarthing init (copies to .git/hooks/)
|
|
8
|
+
# Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
|
|
9
9
|
|
|
10
10
|
set -uo pipefail
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# Find project root
|
|
13
|
+
# Try find-root.sh via symlink resolution first, then fall back to .git location
|
|
13
14
|
REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
|
|
16
|
+
if [[ -f "$FIND_ROOT" ]]; then
|
|
17
|
+
source "$FIND_ROOT"
|
|
18
|
+
else
|
|
19
|
+
# Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
|
|
20
|
+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
|
|
21
|
+
export PROJECT_ROOT
|
|
16
22
|
fi
|
|
17
23
|
|
|
18
24
|
SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -7,7 +7,7 @@ Uncategorized utilities and one-off scripts.
|
|
|
7
7
|
| Script | Purpose |
|
|
8
8
|
|--------|---------|
|
|
9
9
|
| `deploy.sh` | Deployment script |
|
|
10
|
-
| `doctor-dogfood.sh` | Health check for
|
|
10
|
+
| `doctor-dogfood.sh` | Health check for framework/orchestrator development setup |
|
|
11
11
|
| `run-ci.sh` | Run CI locally |
|
|
12
12
|
| `statusline.sh` | Status line configuration |
|
|
13
13
|
| `uninstall.sh` | Uninstall Pennyfarthing from project |
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -134,6 +134,39 @@ if [ -n "$config_file" ] && [ -n "$agent_name" ]; then
|
|
|
134
134
|
fi
|
|
135
135
|
theme_display="$character_display"
|
|
136
136
|
|
|
137
|
+
# Tandem indicator: detect active backseat agent from observation files
|
|
138
|
+
# Files: .session/{storyId}-tandem-{partner}.md (created by backseat spawn, cleaned on finish)
|
|
139
|
+
tandem_partner=""
|
|
140
|
+
tandem_partner_display=""
|
|
141
|
+
if [ -d "$PROJECT_ROOT/.session" ]; then
|
|
142
|
+
tandem_file=$(find "$PROJECT_ROOT/.session" -maxdepth 1 -name "*-tandem-*.md" -print 2>/dev/null | head -1)
|
|
143
|
+
if [ -n "$tandem_file" ]; then
|
|
144
|
+
# Extract partner name from filename: {storyId}-tandem-{partner}.md
|
|
145
|
+
tandem_partner=$(basename "$tandem_file" | sed -n 's/.*-tandem-\([a-zA-Z_-]*\)\.md$/\1/p')
|
|
146
|
+
if [ -n "$tandem_partner" ] && [ -n "$theme_file" ] && [ -f "$theme_file" ]; then
|
|
147
|
+
# Look up partner's character name from theme
|
|
148
|
+
partner_full=$(yq ".agents.${tandem_partner}.character" "$theme_file" 2>/dev/null)
|
|
149
|
+
if [ -n "$partner_full" ] && [ "$partner_full" != "null" ]; then
|
|
150
|
+
partner_clean=$(echo "$partner_full" | sed 's/ *([^)]*)//g' | xargs)
|
|
151
|
+
partner_clean=$(echo "$partner_clean" | sed -E 's/^(Captain|Lieutenant|Dr\.|Doc|Mr\.|Mrs\.|Ms\.|Admiral|Commander|Chief|Ensign|Translator|Agent|Colonel|Major|Sergeant|Professor|Lord|Lady|Sir|The) +//i')
|
|
152
|
+
partner_wc=$(echo "$partner_clean" | wc -w | tr -d ' ')
|
|
153
|
+
if [ "$partner_wc" -eq 1 ]; then
|
|
154
|
+
tandem_partner_display="$partner_clean"
|
|
155
|
+
else
|
|
156
|
+
tandem_partner_display=$(echo "$partner_clean" | awk '{print $NF}')
|
|
157
|
+
fi
|
|
158
|
+
fi
|
|
159
|
+
# Fallback to agent abbreviation if no theme character
|
|
160
|
+
if [ -z "$tandem_partner_display" ]; then
|
|
161
|
+
tandem_partner_display=$(get_agent_abbrev "$tandem_partner")
|
|
162
|
+
fi
|
|
163
|
+
elif [ -n "$tandem_partner" ]; then
|
|
164
|
+
# No theme file — use abbreviation
|
|
165
|
+
tandem_partner_display=$(get_agent_abbrev "$tandem_partner")
|
|
166
|
+
fi
|
|
167
|
+
fi
|
|
168
|
+
fi
|
|
169
|
+
|
|
137
170
|
# ANSI colors
|
|
138
171
|
RESET=$'\033[0m'
|
|
139
172
|
DIM=$'\033[2m'
|
|
@@ -214,20 +247,29 @@ repo_fmt=$(printf "%-14s" "$dir_name")
|
|
|
214
247
|
branch_fmt=$(printf "%-12s" "${branch}${branch_dirty}")
|
|
215
248
|
model_fmt=$(printf "%-10s" "$model")
|
|
216
249
|
|
|
217
|
-
# Build
|
|
250
|
+
# Build tandem suffix: "+ Partner" when backseat agent is active
|
|
251
|
+
tandem_suffix=""
|
|
252
|
+
tandem_suffix_len=0
|
|
253
|
+
if [ -n "$tandem_partner_display" ]; then
|
|
254
|
+
partner_color=$(get_agent_color "$tandem_partner")
|
|
255
|
+
tandem_suffix=" ${DIM}+${RESET} ${partner_color}${tandem_partner_display}${RESET}"
|
|
256
|
+
tandem_suffix_len=$((3 + ${#tandem_partner_display})) # " + " + name
|
|
257
|
+
fi
|
|
258
|
+
|
|
259
|
+
# Build agent display: [ROLE] Theme (+ Partner) (role in reverse text with color)
|
|
218
260
|
if [ -n "$agent_abbrev" ]; then
|
|
219
261
|
agent_color=$(get_agent_color "$agent_name")
|
|
220
262
|
# Role in reverse text with color, then theme
|
|
221
263
|
if [ -n "$theme_display" ]; then
|
|
222
|
-
agent_section="${agent_color}${REVERSE} ${agent_abbrev} ${RESET} ${DIM}${theme_display}${RESET}"
|
|
223
|
-
# Pad to ~20 chars visual width (abbrev ~3 + spaces ~2 + theme ~10 = ~15
|
|
224
|
-
pad_len=$((18 - ${#agent_abbrev} - ${#theme_display}))
|
|
264
|
+
agent_section="${agent_color}${REVERSE} ${agent_abbrev} ${RESET} ${DIM}${theme_display}${RESET}${tandem_suffix}"
|
|
265
|
+
# Pad to ~20 chars visual width (abbrev ~3 + spaces ~2 + theme ~10 + tandem = ~15+, pad to 20)
|
|
266
|
+
pad_len=$((18 - ${#agent_abbrev} - ${#theme_display} - tandem_suffix_len))
|
|
225
267
|
[ "$pad_len" -lt 0 ] && pad_len=0
|
|
226
268
|
padding=$(printf "%${pad_len}s" "")
|
|
227
269
|
agent_section="${agent_section}${padding}"
|
|
228
270
|
else
|
|
229
|
-
agent_section="${agent_color}${REVERSE} ${agent_abbrev} ${RESET}"
|
|
230
|
-
pad_len=$((17 - ${#agent_abbrev}))
|
|
271
|
+
agent_section="${agent_color}${REVERSE} ${agent_abbrev} ${RESET}${tandem_suffix}"
|
|
272
|
+
pad_len=$((17 - ${#agent_abbrev} - tandem_suffix_len))
|
|
231
273
|
[ "$pad_len" -lt 0 ] && pad_len=0
|
|
232
274
|
padding=$(printf "%${pad_len}s" "")
|
|
233
275
|
agent_section="${agent_section}${padding}"
|
|
@@ -235,8 +277,8 @@ if [ -n "$agent_abbrev" ]; then
|
|
|
235
277
|
else
|
|
236
278
|
# No agent - just show theme if available
|
|
237
279
|
if [ -n "$theme_display" ]; then
|
|
238
|
-
agent_section="${DIM}${theme_display}${RESET}"
|
|
239
|
-
pad_len=$((20 - ${#theme_display}))
|
|
280
|
+
agent_section="${DIM}${theme_display}${RESET}${tandem_suffix}"
|
|
281
|
+
pad_len=$((20 - ${#theme_display} - tandem_suffix_len))
|
|
240
282
|
[ "$pad_len" -lt 0 ] && pad_len=0
|
|
241
283
|
padding=$(printf "%${pad_len}s" "")
|
|
242
284
|
agent_section="${agent_section}${padding}"
|
|
File without changes
|
|
@@ -31,9 +31,8 @@ NC='\033[0m' # No Color
|
|
|
31
31
|
# Required fields in frontmatter
|
|
32
32
|
REQUIRED_FIELDS=("name" "description" "tools" "model")
|
|
33
33
|
|
|
34
|
-
# Expected subagent files (
|
|
34
|
+
# Expected subagent files (7 total - consolidated in Story 31-11/31-12)
|
|
35
35
|
EXPECTED_SUBAGENTS=(
|
|
36
|
-
"workflow-status-check.md"
|
|
37
36
|
"sm-setup.md"
|
|
38
37
|
"sm-finish.md"
|
|
39
38
|
"sm-file-summary.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# - AC1: Updating **Phase:** field to next phase
|
|
7
7
|
# - AC2: Updating Phase History table with end timestamp and duration
|
|
8
8
|
# - AC3: Adding Handoff History row with gate and status
|
|
9
|
-
# - AC4:
|
|
9
|
+
# - AC4: prime correctly detects phase (integration)
|
|
10
10
|
# - AC5: All three transitions documented (TEA→Dev, Dev→Reviewer, Reviewer→SM)
|
|
11
11
|
|
|
12
12
|
set -euo pipefail
|
|
@@ -190,14 +190,14 @@ run_test test_ac3_status_in_history
|
|
|
190
190
|
run_test test_ac3_explicit_edit_for_history
|
|
191
191
|
|
|
192
192
|
# ==============================================================================
|
|
193
|
-
# AC4:
|
|
193
|
+
# AC4: prime correctly detects current phase after handoff
|
|
194
194
|
# ==============================================================================
|
|
195
195
|
echo ""
|
|
196
|
-
echo "--- AC4: workflow
|
|
196
|
+
echo "--- AC4: prime/workflow.py compatibility ---"
|
|
197
197
|
|
|
198
198
|
test_ac4_phase_field_format() {
|
|
199
|
-
# Phase field must use exact format that workflow
|
|
200
|
-
#
|
|
199
|
+
# Phase field must use exact format that prime/workflow.py expects
|
|
200
|
+
# parse_session_header greps for: **Phase:**
|
|
201
201
|
if echo "$HANDOFF_CONTENT" | grep -q '\*\*Phase:\*\*'; then
|
|
202
202
|
pass "AC4.1: Uses correct **Phase:** format"
|
|
203
203
|
else
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# test-drift-detection.sh - Tests for story 8-2: Startup Drift Detection
|
|
3
|
-
# Verifies that
|
|
3
|
+
# Verifies that prime/sprint scripts detect and report drift between
|
|
4
4
|
# merged branches and sprint YAML status
|
|
5
5
|
#
|
|
6
6
|
# RED STATE: These tests will FAIL until Dev implements the feature
|
|
@@ -38,7 +38,7 @@ echo "=== Story 8-2: Startup Drift Detection ==="
|
|
|
38
38
|
echo ""
|
|
39
39
|
|
|
40
40
|
# ==============================================================================
|
|
41
|
-
# AC1:
|
|
41
|
+
# AC1: prime detects merged-but-not-closed stories
|
|
42
42
|
# ==============================================================================
|
|
43
43
|
|
|
44
44
|
echo "--- AC1: Detects merged-but-not-closed stories ---"
|
|
@@ -293,28 +293,9 @@ test_drift_output_format() {
|
|
|
293
293
|
fi
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
-
# Test: workflow-status-check.md references drift detection
|
|
297
|
-
test_workflow_status_check_integration() {
|
|
298
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
299
|
-
|
|
300
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
301
|
-
fail "workflow-status-check includes drift detection" "file exists" "workflow-status-check.md not found"
|
|
302
|
-
return
|
|
303
|
-
fi
|
|
304
|
-
|
|
305
|
-
if grep -qi "drift\|detect_drift" "$workflow_file" 2>/dev/null; then
|
|
306
|
-
pass "workflow-status-check.md references drift detection"
|
|
307
|
-
else
|
|
308
|
-
fail "workflow-status-check includes drift detection" \
|
|
309
|
-
"drift or detect_drift reference in workflow-status-check.md" \
|
|
310
|
-
"no drift reference found"
|
|
311
|
-
fi
|
|
312
|
-
}
|
|
313
|
-
|
|
314
296
|
# Test: Drift report is user-friendly (mentions "merged" and "status")
|
|
315
297
|
test_drift_report_clarity() {
|
|
316
298
|
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
|
|
317
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
318
299
|
|
|
319
300
|
local found=false
|
|
320
301
|
|
|
@@ -323,11 +304,6 @@ test_drift_report_clarity() {
|
|
|
323
304
|
found=true
|
|
324
305
|
fi
|
|
325
306
|
|
|
326
|
-
# Or check workflow-status-check.md for report format
|
|
327
|
-
if [[ -f "$workflow_file" ]] && grep -qi "merged.*status\|drift.*report\|drifted stories" "$workflow_file" 2>/dev/null; then
|
|
328
|
-
found=true
|
|
329
|
-
fi
|
|
330
|
-
|
|
331
307
|
if [[ "$found" == "true" ]]; then
|
|
332
308
|
pass "drift report uses clear terminology (merged, drift, status)"
|
|
333
309
|
else
|
|
@@ -338,7 +314,6 @@ test_drift_report_clarity() {
|
|
|
338
314
|
}
|
|
339
315
|
|
|
340
316
|
test_drift_output_format
|
|
341
|
-
test_workflow_status_check_integration
|
|
342
317
|
test_drift_report_clarity
|
|
343
318
|
|
|
344
319
|
echo ""
|
|
@@ -353,7 +328,6 @@ echo ""
|
|
|
353
328
|
# Test: reconcile_drift function or auto-reconcile logic exists
|
|
354
329
|
test_reconcile_function_exists() {
|
|
355
330
|
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
|
|
356
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
357
331
|
|
|
358
332
|
local found=false
|
|
359
333
|
|
|
@@ -362,11 +336,6 @@ test_reconcile_function_exists() {
|
|
|
362
336
|
found=true
|
|
363
337
|
fi
|
|
364
338
|
|
|
365
|
-
# Or check workflow-status-check.md for reconcile instructions
|
|
366
|
-
if [[ -f "$workflow_file" ]] && grep -qi "reconcile\|auto.reconcile\|update.*done" "$workflow_file" 2>/dev/null; then
|
|
367
|
-
found=true
|
|
368
|
-
fi
|
|
369
|
-
|
|
370
339
|
if [[ "$found" == "true" ]]; then
|
|
371
340
|
pass "auto-reconcile functionality exists"
|
|
372
341
|
else
|
|
@@ -402,7 +371,6 @@ test_reconcile_uses_update() {
|
|
|
402
371
|
# Test: Auto-reconcile logs to reconciliation.log
|
|
403
372
|
test_reconcile_logs_event() {
|
|
404
373
|
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
|
|
405
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
406
374
|
|
|
407
375
|
local found=false
|
|
408
376
|
|
|
@@ -411,11 +379,6 @@ test_reconcile_logs_event() {
|
|
|
411
379
|
found=true
|
|
412
380
|
fi
|
|
413
381
|
|
|
414
|
-
# Or check workflow-status-check.md for logging instructions
|
|
415
|
-
if [[ -f "$workflow_file" ]] && grep -qi "log.*reconcil\|reconciliation.log" "$workflow_file" 2>/dev/null; then
|
|
416
|
-
found=true
|
|
417
|
-
fi
|
|
418
|
-
|
|
419
382
|
if [[ "$found" == "true" ]]; then
|
|
420
383
|
pass "auto-reconcile logs to reconciliation.log"
|
|
421
384
|
else
|
|
@@ -425,25 +388,6 @@ test_reconcile_logs_event() {
|
|
|
425
388
|
fi
|
|
426
389
|
}
|
|
427
390
|
|
|
428
|
-
# Test: workflow-status-check offers reconcile option to user
|
|
429
|
-
test_offers_reconcile_option() {
|
|
430
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
431
|
-
|
|
432
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
433
|
-
fail "offers reconcile option" "file exists" "workflow-status-check.md not found"
|
|
434
|
-
return
|
|
435
|
-
fi
|
|
436
|
-
|
|
437
|
-
# Check for user prompt or option offering
|
|
438
|
-
if grep -qiE "auto.reconcile|offer.*reconcile|reconcile.*option|y/n|yes/no" "$workflow_file" 2>/dev/null; then
|
|
439
|
-
pass "workflow-status-check offers reconcile option to user"
|
|
440
|
-
else
|
|
441
|
-
fail "offers reconcile option" \
|
|
442
|
-
"user prompt for auto-reconcile in workflow-status-check.md" \
|
|
443
|
-
"reconcile prompt not found"
|
|
444
|
-
fi
|
|
445
|
-
}
|
|
446
|
-
|
|
447
391
|
# Test: reconcile_drift transitions Jira to Done
|
|
448
392
|
test_reconcile_transitions_jira() {
|
|
449
393
|
local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
|
|
@@ -463,30 +407,10 @@ test_reconcile_transitions_jira() {
|
|
|
463
407
|
fi
|
|
464
408
|
}
|
|
465
409
|
|
|
466
|
-
# Test: workflow-status-check mentions Jira in drift reconciliation
|
|
467
|
-
test_workflow_mentions_jira_reconcile() {
|
|
468
|
-
local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
|
|
469
|
-
|
|
470
|
-
if [[ ! -f "$workflow_file" ]]; then
|
|
471
|
-
fail "workflow mentions Jira reconcile" "file exists" "workflow-status-check.md not found"
|
|
472
|
-
return
|
|
473
|
-
fi
|
|
474
|
-
|
|
475
|
-
if grep -qiE 'jira.*done|transition.*jira|jira.*status' "$workflow_file" 2>/dev/null; then
|
|
476
|
-
pass "workflow-status-check mentions Jira in reconciliation"
|
|
477
|
-
else
|
|
478
|
-
fail "workflow mentions Jira reconcile" \
|
|
479
|
-
"Jira transition reference in workflow-status-check.md" \
|
|
480
|
-
"Jira reconcile not found"
|
|
481
|
-
fi
|
|
482
|
-
}
|
|
483
|
-
|
|
484
410
|
test_reconcile_function_exists
|
|
485
411
|
test_reconcile_uses_update
|
|
486
412
|
test_reconcile_transitions_jira
|
|
487
413
|
test_reconcile_logs_event
|
|
488
|
-
test_offers_reconcile_option
|
|
489
|
-
test_workflow_mentions_jira_reconcile
|
|
490
414
|
|
|
491
415
|
echo ""
|
|
492
416
|
|
|
@@ -580,7 +504,7 @@ if [[ $TESTS_FAILED -gt 0 ]]; then
|
|
|
580
504
|
echo " 2. Output format: story_id:yaml_status:jira_status (AC2)"
|
|
581
505
|
echo " - Clear, user-friendly terminology"
|
|
582
506
|
echo " - Include both YAML and Jira status"
|
|
583
|
-
echo " 3. Add
|
|
507
|
+
echo " 3. Add drift detection to prime/workflow.py (AC1, AC2)"
|
|
584
508
|
echo " - Call detect_drift after git scan"
|
|
585
509
|
echo " - Report drifted stories before state determination"
|
|
586
510
|
echo " 4. Add auto-reconcile option (AC3)"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -6,7 +6,7 @@ Scripts for workflow mechanics, phase transitions, and quality gates.
|
|
|
6
6
|
|
|
7
7
|
| Script | Purpose |
|
|
8
8
|
|--------|---------|
|
|
9
|
-
| `finish-story.sh` |
|
|
9
|
+
| `finish-story.sh` | **DEPRECATED** — forwards to `pf sprint story finish` |
|
|
10
10
|
| `fix-session-phase.sh` | Repair session file phase state |
|
|
11
11
|
| `check.sh` | Quality gates runner (lint, type check, tests) |
|
|
12
12
|
| `list-workflows.sh` | List available workflows |
|
|
@@ -18,7 +18,7 @@ Scripts for workflow mechanics, phase transitions, and quality gates.
|
|
|
18
18
|
## Usage
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
pf sprint story finish MSSCI-12345
|
|
22
22
|
.pennyfarthing/scripts/workflow/start-workflow.sh prd --mode create
|
|
23
23
|
```
|
|
24
24
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|