@pennyfarthing/core 10.0.5 → 10.1.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 +9 -7
- package/package.json +15 -11
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +251 -4
- package/packages/core/dist/cli/commands/doctor.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/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/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/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/orchestrator.md +0 -6
- package/pennyfarthing-dist/agents/pm.md +0 -6
- package/pennyfarthing-dist/agents/sm.md +0 -6
- 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 +1 -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-coordination.md +11 -13
- package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
- 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/skill-schema.md +4 -4
- 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 +0 -0
- 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 +12 -5
- 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 +0 -0
- 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/test/ensure-swebench-data.sh +0 -0
- package/pennyfarthing-dist/scripts/test/swebench-judge.py +0 -0
- package/pennyfarthing-dist/scripts/test/test-cache.sh +0 -0
- package/pennyfarthing-dist/scripts/test/test-setup.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/compute-theme-tiers.sh +0 -0
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +0 -0
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +0 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
- 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 +62 -17
- 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.yaml +20 -16
- 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 +4 -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/epics-and-stories/steps/step-05-import-to-future.md +41 -24
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.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/cli.py +15 -0
- package/pennyfarthing_scripts/codemarkers/__init__.py +19 -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 +326 -0
- package/pennyfarthing_scripts/codemarkers/cli.py +129 -0
- package/pennyfarthing_scripts/codemarkers/formatters.py +89 -0
- package/pennyfarthing_scripts/codemarkers/models.py +45 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- 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 +78 -0
- package/pennyfarthing_scripts/complexity/formatters.py +64 -0
- package/pennyfarthing_scripts/complexity/models.py +32 -0
- 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 +323 -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 +72 -0
- package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
- package/pennyfarthing_scripts/dependencies/models.py +39 -0
- package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
- package/pennyfarthing_scripts/healthscore/__main__.py +6 -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 +161 -0
- package/pennyfarthing_scripts/healthscore/cli.py +76 -0
- package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
- package/pennyfarthing_scripts/healthscore/models.py +44 -0
- package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- 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 +27 -0
- package/pennyfarthing_scripts/hotspots/cli.py +10 -8
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.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__/operations.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/bidirectional.py +42 -15
- package/pennyfarthing_scripts/jira/cli.py +4 -1
- package/pennyfarthing_scripts/jira/client.py +28 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.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__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.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__/loader.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_epic.py +198 -94
- package/pennyfarthing_scripts/sprint/cli.py +29 -19
- package/pennyfarthing_scripts/sprint/story_add.py +202 -27
- package/pennyfarthing_scripts/sprint/story_finish.py +211 -0
- package/pennyfarthing_scripts/sprint/work.py +27 -3
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.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_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_validate_cmd.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/test_codemarkers.py +682 -0
- package/pennyfarthing_scripts/tests/test_healthscore.py +524 -0
- 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 +286 -0
- package/scripts/README.md +53 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
|
@@ -52,8 +52,8 @@ Prime selects a context tier based on session state to manage token overhead:
|
|
|
52
52
|
## Invocation
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
# From agent commands (via CLI)
|
|
56
|
-
|
|
55
|
+
# From agent commands (via pf CLI)
|
|
56
|
+
pf agent start "<agent>" --quiet
|
|
57
57
|
|
|
58
58
|
# TypeScript API (from Cyclist)
|
|
59
59
|
getPrimeContext(agentName, projectDir)
|
|
@@ -292,7 +292,7 @@ Never manually edit sprint YAML. Use the provided commands.
|
|
|
292
292
|
Add a new story to an epic.
|
|
293
293
|
|
|
294
294
|
<run>
|
|
295
|
-
|
|
295
|
+
pf sprint story add <epic-id> "<title>" <points>
|
|
296
296
|
</run>
|
|
297
297
|
|
|
298
298
|
<args>
|
|
@@ -304,7 +304,7 @@ python3 -m pennyfarthing_scripts.cli sprint story add <epic-id> "<title>" <point
|
|
|
304
304
|
</args>
|
|
305
305
|
|
|
306
306
|
<example>
|
|
307
|
-
|
|
307
|
+
pf sprint story add epic-76 "Add user authentication" 3
|
|
308
308
|
</example>
|
|
309
309
|
|
|
310
310
|
<output>
|
|
@@ -322,7 +322,7 @@ After creating, use `/sprint story size` for sizing guidelines.
|
|
|
322
322
|
Complete a story after PR merge.
|
|
323
323
|
|
|
324
324
|
<run>
|
|
325
|
-
|
|
325
|
+
pf sprint story finish <story-id>
|
|
326
326
|
</run>
|
|
327
327
|
|
|
328
328
|
<args>
|
|
@@ -332,7 +332,7 @@ python3 -m pennyfarthing_scripts.cli sprint story finish <story-id>
|
|
|
332
332
|
</args>
|
|
333
333
|
|
|
334
334
|
<example>
|
|
335
|
-
|
|
335
|
+
pf sprint story finish MSSCI-12052
|
|
336
336
|
# Archives story, updates Jira, cleans session files
|
|
337
337
|
</example>
|
|
338
338
|
|
|
@@ -91,7 +91,7 @@ check_theme_version() {
|
|
|
91
91
|
echo "" >&2
|
|
92
92
|
echo "Warning: Theme '${theme_name}' was created with Pennyfarthing ${theme_version}" >&2
|
|
93
93
|
echo " Current version: ${current_version} - agent roles may have changed." >&2
|
|
94
|
-
echo " Run '/theme
|
|
94
|
+
echo " Run '/theme maker' to review and update." >&2
|
|
95
95
|
echo "" >&2
|
|
96
96
|
fi
|
|
97
97
|
|
|
@@ -232,7 +232,11 @@ case "$1" in
|
|
|
232
232
|
PRIME_ARGS+=(--no-persona)
|
|
233
233
|
fi
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
if command -v pf &>/dev/null; then
|
|
236
|
+
pf prime "${PRIME_ARGS[@]}"
|
|
237
|
+
else
|
|
238
|
+
python3 -m pennyfarthing_scripts.prime "${PRIME_ARGS[@]}"
|
|
239
|
+
fi
|
|
236
240
|
;;
|
|
237
241
|
stop)
|
|
238
242
|
# Use provided session ID, fall back to SESSION_ID env var
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -2,29 +2,27 @@
|
|
|
2
2
|
# prime.sh - Load essential project context at agent activation
|
|
3
3
|
# Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]
|
|
4
4
|
#
|
|
5
|
-
#
|
|
5
|
+
# Uses the `pf` CLI (installed via uv/pipx during pennyfarthing init).
|
|
6
|
+
# Falls back to python3 -m with PYTHONPATH if pf is not available.
|
|
6
7
|
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
# Prefer pf CLI if available
|
|
9
|
+
if command -v pf &>/dev/null; then
|
|
10
|
+
exec pf prime "$@"
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Fallback: find pennyfarthing_scripts via PYTHONPATH
|
|
10
14
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
11
15
|
PACKAGE_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
|
|
12
16
|
|
|
13
|
-
# Fallback: if pennyfarthing_scripts not found at expected location,
|
|
14
|
-
# look in node_modules (handles edge cases like stale copies)
|
|
15
17
|
if [[ ! -d "$PACKAGE_ROOT/pennyfarthing_scripts" ]]; then
|
|
16
|
-
# Find project root by looking for .pennyfarthing marker
|
|
17
18
|
PROJECT_ROOT="$PWD"
|
|
18
19
|
while [[ ! -d "$PROJECT_ROOT/.pennyfarthing" ]] && [[ "$PROJECT_ROOT" != "/" ]]; do
|
|
19
20
|
PROJECT_ROOT="$(dirname "$PROJECT_ROOT")"
|
|
20
21
|
done
|
|
21
|
-
# Try node_modules location
|
|
22
22
|
if [[ -d "$PROJECT_ROOT/node_modules/@pennyfarthing/core/pennyfarthing_scripts" ]]; then
|
|
23
23
|
PACKAGE_ROOT="$PROJECT_ROOT/node_modules/@pennyfarthing/core"
|
|
24
24
|
fi
|
|
25
25
|
fi
|
|
26
26
|
|
|
27
|
-
# Set PYTHONPATH so Python can find pennyfarthing_scripts
|
|
28
27
|
export PYTHONPATH="${PACKAGE_ROOT}:${PYTHONPATH:-}"
|
|
29
|
-
|
|
30
28
|
exec python3 -m pennyfarthing_scripts.prime "$@"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# install-git-hooks.sh - Install Pennyfarthing git hooks for
|
|
2
|
+
# install-git-hooks.sh - Install Pennyfarthing git hooks for framework development
|
|
3
3
|
#
|
|
4
4
|
# Usage: ./pennyfarthing-dist/scripts/install-git-hooks.sh
|
|
5
5
|
#
|
|
6
|
-
# For
|
|
7
|
-
#
|
|
6
|
+
# For the pennyfarthing framework repo and orchestrator repos that inline it.
|
|
7
|
+
# End-user projects use `pennyfarthing init` which copies hooks from node_modules.
|
|
8
|
+
# This script creates symlinks so hook changes in pennyfarthing-dist/ take effect immediately.
|
|
8
9
|
|
|
9
10
|
set -euo pipefail
|
|
10
11
|
|
|
@@ -14,10 +15,11 @@ source "$SCRIPT_DIR/../lib/find-root.sh"
|
|
|
14
15
|
HOOKS_SOURCE="$PROJECT_ROOT/pennyfarthing-dist/scripts/hooks"
|
|
15
16
|
HOOKS_DEST="$PROJECT_ROOT/.git/hooks"
|
|
16
17
|
|
|
17
|
-
# Check we're in
|
|
18
|
+
# Check we're in a repo with pennyfarthing-dist (framework or orchestrator)
|
|
18
19
|
if [[ ! -d "$PROJECT_ROOT/pennyfarthing-dist" ]]; then
|
|
19
|
-
echo "Error: This script
|
|
20
|
-
echo "
|
|
20
|
+
echo "Error: This script requires pennyfarthing-dist/ at the project root"
|
|
21
|
+
echo " (framework repo or orchestrator with inlined pennyfarthing/)"
|
|
22
|
+
echo " End-user projects should use: pennyfarthing init"
|
|
21
23
|
exit 1
|
|
22
24
|
fi
|
|
23
25
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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
|
|
|
@@ -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
|
|
File without changes
|
|
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
|
|
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
|