@pennyfarthing/core 11.0.0-alpha.0 → 11.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 +84 -26
- package/package.json +14 -16
- package/packages/core/dist/cli/cyclist-migration.test.js +2 -1
- package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
- package/packages/core/dist/cli/ocean-profiles.test.js +5 -4
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
- package/packages/core/dist/cli/theme-maker.test.js +5 -4
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -1
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts +20 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js +278 -0
- package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js.map +1 -0
- package/packages/core/dist/cli/utils/constants.d.ts +7 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +2 -0
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/cli/utils/constants.test.d.ts +10 -0
- package/packages/core/dist/cli/utils/constants.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/constants.test.js +38 -0
- package/packages/core/dist/cli/utils/constants.test.js.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.d.ts +139 -0
- package/packages/core/dist/consultation/consultation-protocol.d.ts.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.js +178 -0
- package/packages/core/dist/consultation/consultation-protocol.js.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.test.d.ts +20 -0
- package/packages/core/dist/consultation/consultation-protocol.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/consultation-protocol.test.js +474 -0
- package/packages/core/dist/consultation/consultation-protocol.test.js.map +1 -0
- package/packages/core/dist/public/js/react/react.js +30 -30
- package/packages/core/dist/scripts/generate-report.test.js +2 -2
- package/packages/core/dist/scripts/generate-spider-report.test.js +2 -2
- package/packages/core/dist/scripts/generate-spider.test.js +2 -1
- package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
- package/packages/core/dist/server/api/file-browser.d.ts.map +1 -1
- package/packages/core/dist/server/api/file-browser.js +19 -1
- package/packages/core/dist/server/api/file-browser.js.map +1 -1
- package/packages/core/dist/server/api/git-fetch-cooldown.test.d.ts +10 -0
- package/packages/core/dist/server/api/git-fetch-cooldown.test.d.ts.map +1 -0
- package/packages/core/dist/server/api/git-fetch-cooldown.test.js +30 -0
- package/packages/core/dist/server/api/git-fetch-cooldown.test.js.map +1 -0
- package/packages/core/dist/server/api/git.d.ts +8 -0
- package/packages/core/dist/server/api/git.d.ts.map +1 -1
- package/packages/core/dist/server/api/git.js +37 -10
- package/packages/core/dist/server/api/git.js.map +1 -1
- package/packages/core/dist/server/api/health-score.d.ts.map +1 -1
- package/packages/core/dist/server/api/health-score.js +25 -1
- package/packages/core/dist/server/api/health-score.js.map +1 -1
- package/packages/core/dist/server/api/index.d.ts +1 -1
- package/packages/core/dist/server/api/index.d.ts.map +1 -1
- package/packages/core/dist/server/api/index.js +1 -1
- package/packages/core/dist/server/api/index.js.map +1 -1
- package/packages/core/dist/server/api/settings.d.ts.map +1 -1
- package/packages/core/dist/server/api/settings.js +73 -2
- package/packages/core/dist/server/api/settings.js.map +1 -1
- package/packages/core/dist/server/api/theme-agents.d.ts.map +1 -1
- package/packages/core/dist/server/api/theme-agents.js +61 -0
- package/packages/core/dist/server/api/theme-agents.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.d.ts +35 -13
- package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
- package/packages/core/dist/server/otlp-receiver.js +76 -16
- package/packages/core/dist/server/otlp-receiver.js.map +1 -1
- package/packages/core/dist/server/paths.d.ts.map +1 -1
- package/packages/core/dist/server/paths.js +11 -1
- package/packages/core/dist/server/paths.js.map +1 -1
- package/packages/core/dist/server/server.d.ts +3 -1
- package/packages/core/dist/server/server.d.ts.map +1 -1
- package/packages/core/dist/server/server.js +23 -16
- package/packages/core/dist/server/server.js.map +1 -1
- package/packages/core/dist/server/server.test.js.map +1 -1
- package/packages/core/dist/workflow/gate-file-validation.d.ts +49 -0
- package/packages/core/dist/workflow/gate-file-validation.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.js +157 -0
- package/packages/core/dist/workflow/gate-file-validation.js.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.test.d.ts +19 -0
- package/packages/core/dist/workflow/gate-file-validation.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-file-validation.test.js +536 -0
- package/packages/core/dist/workflow/gate-file-validation.test.js.map +1 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.d.ts +14 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.js +339 -0
- package/packages/core/dist/workflow/gate-schema-validation.test.js.map +1 -0
- package/packages/core/dist/workflow/handoff.js +2 -2
- package/packages/core/dist/workflow/handoff.js.map +1 -1
- package/packages/core/dist/workflow/handoff.test.js +16 -0
- package/packages/core/dist/workflow/handoff.test.js.map +1 -1
- package/packages/core/dist/workflow/variable-resolver.test.js +1 -1
- package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-migration.test.js +4 -3
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.d.ts +4 -2
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +43 -8
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/pennyfarthing-dist/agents/README.md +6 -14
- package/pennyfarthing-dist/agents/architect.md +43 -30
- package/pennyfarthing-dist/agents/ba.md +30 -29
- package/pennyfarthing-dist/agents/dev.md +76 -41
- package/pennyfarthing-dist/agents/devops.md +57 -21
- package/pennyfarthing-dist/agents/orchestrator.md +3 -11
- package/pennyfarthing-dist/agents/pm.md +45 -31
- package/pennyfarthing-dist/agents/reviewer.md +20 -66
- package/pennyfarthing-dist/agents/sm-setup.md +2 -2
- package/pennyfarthing-dist/agents/sm.md +8 -30
- package/pennyfarthing-dist/agents/tea.md +25 -41
- package/pennyfarthing-dist/agents/tech-writer.md +33 -90
- package/pennyfarthing-dist/agents/ux-designer.md +39 -40
- package/pennyfarthing-dist/commands/benchmark-control.md +8 -64
- package/pennyfarthing-dist/commands/benchmark.md +8 -480
- package/pennyfarthing-dist/commands/job-fair.md +8 -97
- package/pennyfarthing-dist/commands/pf-benchmark-control.md +70 -0
- package/pennyfarthing-dist/commands/pf-benchmark.md +486 -0
- package/pennyfarthing-dist/commands/pf-chore.md +4 -4
- package/pennyfarthing-dist/commands/pf-ci.md +40 -0
- package/pennyfarthing-dist/commands/pf-close-epic.md +9 -27
- package/pennyfarthing-dist/commands/pf-continue-session.md +9 -213
- package/pennyfarthing-dist/commands/pf-create-branches-from-story.md +11 -353
- package/pennyfarthing-dist/commands/pf-docs.md +28 -0
- package/pennyfarthing-dist/commands/pf-epic.md +67 -0
- package/pennyfarthing-dist/commands/pf-git-cleanup.md +11 -52
- package/pennyfarthing-dist/commands/pf-git.md +75 -0
- package/pennyfarthing-dist/commands/pf-help.md +110 -128
- package/pennyfarthing-dist/commands/pf-job-fair.md +102 -0
- package/pennyfarthing-dist/commands/pf-new-work.md +9 -18
- package/pennyfarthing-dist/commands/pf-parallel-work.md +6 -66
- package/pennyfarthing-dist/commands/pf-release.md +11 -76
- package/pennyfarthing-dist/commands/pf-repo-status.md +11 -44
- package/pennyfarthing-dist/commands/pf-run-ci.md +8 -111
- package/pennyfarthing-dist/commands/pf-session.md +51 -0
- package/pennyfarthing-dist/commands/pf-solo.md +447 -0
- package/pennyfarthing-dist/commands/pf-sprint-planning.md +8 -104
- package/pennyfarthing-dist/commands/pf-standalone.md +1 -1
- package/pennyfarthing-dist/commands/pf-start-epic.md +9 -163
- package/pennyfarthing-dist/commands/pf-sync-epic-to-jira.md +8 -179
- package/pennyfarthing-dist/commands/pf-sync-work-with-sprint.md +8 -368
- package/pennyfarthing-dist/commands/pf-update-domain-docs.md +8 -78
- package/pennyfarthing-dist/commands/solo.md +8 -442
- package/pennyfarthing-dist/guides/agent-behavior.md +14 -14
- package/pennyfarthing-dist/guides/agent-coordination.md +7 -7
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
- package/pennyfarthing-dist/guides/bikerack.md +128 -0
- package/pennyfarthing-dist/guides/brownfield-tools.md +133 -0
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +2 -2
- package/pennyfarthing-dist/guides/gate-schema.md +227 -0
- package/pennyfarthing-dist/guides/gates.md +120 -0
- package/pennyfarthing-dist/guides/handoff-cli.md +116 -0
- package/pennyfarthing-dist/guides/hooks.md +86 -4
- package/pennyfarthing-dist/guides/output-styles.md +65 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +5 -5
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -4
- package/pennyfarthing-dist/guides/prompt-patterns.md +5 -5
- package/pennyfarthing-dist/guides/reflector.md +4 -4
- package/pennyfarthing-dist/guides/session-artifacts.md +1 -1
- package/pennyfarthing-dist/guides/skill-schema.md +1 -1
- package/pennyfarthing-dist/guides/tandem-protocol.md +13 -1
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +5 -4
- package/pennyfarthing-dist/personas/themes/hogans-heroes.yaml +11 -22
- package/pennyfarthing-dist/personas/themes/stephen-king.yaml +13 -24
- package/pennyfarthing-dist/scripts/core/agent-session.sh +0 -0
- package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +1 -1
- package/pennyfarthing-dist/scripts/core/prime.sh +0 -0
- 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 +0 -0
- 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/dispatcher-template.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +19 -14
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
- 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/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 +0 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +191 -57
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +26 -10
- 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 +0 -0
- 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 +0 -0
- 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/list-themes.sh +0 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -0
- 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 +0 -0
- 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/pf-changelog/SKILL.md +4 -4
- package/pennyfarthing-dist/skills/pf-sprint/skill.md +1 -1
- package/pennyfarthing-dist/skills/pf-story/scripts/create-story.sh +0 -0
- package/pennyfarthing-dist/skills/pf-story/scripts/size-story.sh +0 -0
- package/pennyfarthing-dist/skills/pf-story/scripts/story-template.sh +0 -0
- package/pennyfarthing-dist/skills/pf-systematic-debugging/SKILL.md +0 -1
- package/pennyfarthing-dist/skills/pf-workflow/scripts/list-workflows.sh +0 -0
- package/pennyfarthing-dist/skills/pf-workflow/scripts/resume-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/pf-workflow/scripts/show-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/pf-workflow/scripts/start-workflow.sh +0 -0
- package/pennyfarthing-dist/skills/pf-workflow/scripts/workflow-status.sh +0 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +4 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +8 -21
- package/pennyfarthing-dist/workflows/2party-tdd.yaml +11 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +2 -0
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +4 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +4 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +3 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +3 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +2 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/changed_panel.py +105 -0
- package/pennyfarthing_scripts/bikerack/debug_panel.py +218 -0
- package/pennyfarthing_scripts/bikerack/diffs_panel.py +203 -27
- package/pennyfarthing_scripts/cli.py +114 -0
- package/pennyfarthing_scripts/epic/__init__.py +0 -0
- package/pennyfarthing_scripts/epic/cli.py +64 -0
- package/pennyfarthing_scripts/gate/__init__.py +1 -0
- package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/cli.py +56 -0
- package/pennyfarthing_scripts/gate/validate.py +266 -0
- package/pennyfarthing_scripts/git_group/__init__.py +0 -0
- package/pennyfarthing_scripts/git_group/cli.py +100 -0
- package/pennyfarthing_scripts/handoff/__init__.py +1 -0
- package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/cli.py +120 -0
- package/pennyfarthing_scripts/handoff/complete_phase.py +155 -0
- package/pennyfarthing_scripts/handoff/gate_file.py +105 -0
- package/pennyfarthing_scripts/handoff/gate_runner.py +152 -0
- package/pennyfarthing_scripts/handoff/marker.py +109 -0
- package/pennyfarthing_scripts/handoff/resolve_gate.py +152 -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/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/workflow.py +39 -0
- package/pennyfarthing_scripts/session/__init__.py +0 -0
- package/pennyfarthing_scripts/session/cli.py +87 -0
- package/pennyfarthing_scripts/session_start_hook.py +4 -4
- 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__/epic_update.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__/yaml_io.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/archive_epic.py +8 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.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_108_1_gate_migration.py +540 -0
- package/pennyfarthing_scripts/tests/test_108_2_remove_handoff_fallback.py +339 -0
- package/pennyfarthing_scripts/tests/test_archive_epic.py +1 -2
- package/pennyfarthing_scripts/tests/test_confidence_sm_evaluation.py +253 -0
- package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +315 -0
- package/pennyfarthing_scripts/tests/test_gate_file_resolution.py +341 -0
- package/pennyfarthing_scripts/tests/test_gate_runner.py +620 -0
- package/pennyfarthing_scripts/tests/test_handoff_cli.py +929 -0
- package/pennyfarthing_scripts/tests/test_handoff_e2e.py +454 -0
- package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +464 -0
- package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/skill_command.py +200 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +64 -0
- package/pennyfarthing_scripts/validate/cli.py +15 -4
- package/packages/core/dist/benchmark/package-exports.test.d.ts.map +0 -1
- package/packages/core/dist/benchmark/package-exports.test.js.map +0 -1
- package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
- package/packages/core/dist/scripts/benchmark-integration.js +0 -691
- package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts +0 -13
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/benchmark-integration.test.js +0 -680
- package/packages/core/dist/scripts/benchmark-integration.test.js.map +0 -1
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +0 -18
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/debugging-scenarios.test.js +0 -317
- package/packages/core/dist/scripts/debugging-scenarios.test.js.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/job-fair-aggregator.test.js +0 -616
- package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +0 -1
- package/pennyfarthing-dist/agents/handoff.md +0 -250
- package/pennyfarthing-dist/agents/sm-handoff.md +0 -152
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -112
- package/pennyfarthing-dist/skills/pf-dev-patterns/SKILL.md +0 -461
- package/scripts/README.md +0 -41
|
@@ -55,7 +55,7 @@ skills:
|
|
|
55
55
|
anti_patterns:
|
|
56
56
|
- Don't skip security considerations in review
|
|
57
57
|
- Don't approve without running tests
|
|
58
|
-
related_skills: [pf-testing
|
|
58
|
+
related_skills: [pf-testing]
|
|
59
59
|
keywords: [pr, pull-request, quality, linting, security]
|
|
60
60
|
|
|
61
61
|
pf-context-engineering:
|
|
@@ -94,24 +94,6 @@ skills:
|
|
|
94
94
|
related_skills: []
|
|
95
95
|
keywords: [tui, terminal, visualization, dashboard]
|
|
96
96
|
|
|
97
|
-
pf-dev-patterns:
|
|
98
|
-
name: pf-dev-patterns
|
|
99
|
-
description: Common development patterns, fixes, and gotchas
|
|
100
|
-
category: development
|
|
101
|
-
tags: [patterns, debugging, implementation]
|
|
102
|
-
version: "1.0.0"
|
|
103
|
-
prerequisites: []
|
|
104
|
-
examples:
|
|
105
|
-
- context: Implementing features
|
|
106
|
-
invocation: /dev-patterns
|
|
107
|
-
- context: Avoiding known pitfalls
|
|
108
|
-
invocation: /dev-patterns gotchas
|
|
109
|
-
anti_patterns:
|
|
110
|
-
- Don't apply patterns from other frameworks blindly
|
|
111
|
-
related_skills: [pf-code-review, pf-testing]
|
|
112
|
-
keywords: [implementation, debugging, fixes, best-practices]
|
|
113
|
-
allowed_tools: [Read, Glob, Grep, Task] # Reference material - read-only
|
|
114
|
-
|
|
115
97
|
pf-finalize-run:
|
|
116
98
|
name: pf-finalize-run
|
|
117
99
|
description: Validate and save benchmark run results - single exit point for all runs
|
|
@@ -133,6 +115,7 @@ skills:
|
|
|
133
115
|
category: project-management
|
|
134
116
|
tags: [jira, issues, sprint]
|
|
135
117
|
version: "1.0.0"
|
|
118
|
+
command_group: jira
|
|
136
119
|
prerequisites: []
|
|
137
120
|
examples:
|
|
138
121
|
- context: Viewing sprint issues
|
|
@@ -218,6 +201,7 @@ skills:
|
|
|
218
201
|
category: project-management
|
|
219
202
|
tags: [permissions, security, tools]
|
|
220
203
|
version: "1.0.0"
|
|
204
|
+
command_group: permissions
|
|
221
205
|
prerequisites: []
|
|
222
206
|
examples:
|
|
223
207
|
- context: Viewing active grants
|
|
@@ -255,6 +239,7 @@ skills:
|
|
|
255
239
|
category: project-management
|
|
256
240
|
tags: [sprint, status, backlog, stories, epics]
|
|
257
241
|
version: "2.0.0"
|
|
242
|
+
command_group: sprint
|
|
258
243
|
prerequisites: []
|
|
259
244
|
examples:
|
|
260
245
|
- context: Checking sprint status
|
|
@@ -288,7 +273,7 @@ skills:
|
|
|
288
273
|
anti_patterns:
|
|
289
274
|
- Don't jump to solutions without reproducing the issue first
|
|
290
275
|
- Don't fix symptoms instead of root causes
|
|
291
|
-
related_skills: [pf-testing, pf-
|
|
276
|
+
related_skills: [pf-testing, pf-agentic-patterns]
|
|
292
277
|
keywords: [debugging, bisect, reproduce, isolate, root-cause, regression]
|
|
293
278
|
|
|
294
279
|
pf-story:
|
|
@@ -326,7 +311,7 @@ skills:
|
|
|
326
311
|
anti_patterns:
|
|
327
312
|
- Don't run tests directly - use testing-runner subagent
|
|
328
313
|
- Don't skip RED phase in TDD workflow
|
|
329
|
-
related_skills: [pf-
|
|
314
|
+
related_skills: [pf-code-review]
|
|
330
315
|
keywords: [jest, vitest, pytest, unit-test, integration, tdd, red-green]
|
|
331
316
|
|
|
332
317
|
pf-theme:
|
|
@@ -335,6 +320,7 @@ skills:
|
|
|
335
320
|
category: theming
|
|
336
321
|
tags: [personas, themes, customization, creation]
|
|
337
322
|
version: "2.0.0"
|
|
323
|
+
command_group: theme
|
|
338
324
|
prerequisites: []
|
|
339
325
|
examples:
|
|
340
326
|
- context: Listing available themes
|
|
@@ -375,6 +361,7 @@ skills:
|
|
|
375
361
|
category: project-management
|
|
376
362
|
tags: [workflow, phases, tdd]
|
|
377
363
|
version: "1.0.0"
|
|
364
|
+
command_group: workflow
|
|
378
365
|
prerequisites: []
|
|
379
366
|
examples:
|
|
380
367
|
- context: Listing available workflows
|
|
@@ -53,6 +53,7 @@ workflow:
|
|
|
53
53
|
Present findings to user. User decides what to add/change.
|
|
54
54
|
Update the story description with agreed refinements.
|
|
55
55
|
gate:
|
|
56
|
+
file: gates/approval
|
|
56
57
|
type: approval
|
|
57
58
|
condition: User reviewed dev-perspective gaps and decided on each item
|
|
58
59
|
|
|
@@ -73,6 +74,7 @@ workflow:
|
|
|
73
74
|
Present findings to user. User decides what to add/change.
|
|
74
75
|
Update the story description with agreed refinements.
|
|
75
76
|
gate:
|
|
77
|
+
file: gates/approval
|
|
76
78
|
type: approval
|
|
77
79
|
condition: User reviewed tea-perspective gaps and decided on each item
|
|
78
80
|
|
|
@@ -93,6 +95,7 @@ workflow:
|
|
|
93
95
|
|
|
94
96
|
Fix any remaining issues, then hand off to TEA.
|
|
95
97
|
gate:
|
|
98
|
+
file: gates/approval
|
|
96
99
|
type: approval
|
|
97
100
|
condition: Story passes quality check and is ready for TEA
|
|
98
101
|
|
|
@@ -122,6 +125,7 @@ workflow:
|
|
|
122
125
|
In the TEA Assessment handoff, list what quality gates Dev
|
|
123
126
|
should expect to pass beyond the functional tests.
|
|
124
127
|
gate:
|
|
128
|
+
file: gates/tests-fail
|
|
125
129
|
type: tests_fail
|
|
126
130
|
condition: All acceptance criteria have test coverage, including quality gate check
|
|
127
131
|
|
|
@@ -154,6 +158,7 @@ workflow:
|
|
|
154
158
|
|
|
155
159
|
Reviewer should only receive code that is verified clean.
|
|
156
160
|
gate:
|
|
161
|
+
file: gates/quality-pass
|
|
157
162
|
type: quality_pass
|
|
158
163
|
condition: >
|
|
159
164
|
All project quality gates pass locally — tests, lint, format,
|
|
@@ -181,6 +186,7 @@ workflow:
|
|
|
181
186
|
- Set review_verdict: approved in story
|
|
182
187
|
- DO NOT merge the PR — hand off to SM for finish phase
|
|
183
188
|
gate:
|
|
189
|
+
file: gates/approval
|
|
184
190
|
type: approval
|
|
185
191
|
condition: Code review passed, no blocking issues
|
|
186
192
|
|
|
@@ -194,6 +200,7 @@ workflow:
|
|
|
194
200
|
from the story. Write failing tests for each testable finding.
|
|
195
201
|
Commit RED tests. Hand off to Dev.
|
|
196
202
|
gate:
|
|
203
|
+
file: gates/tests-fail
|
|
197
204
|
type: tests_fail
|
|
198
205
|
condition: New tests cover reviewer findings
|
|
199
206
|
|
|
@@ -227,6 +234,7 @@ workflow:
|
|
|
227
234
|
If verification fails, hand back to Dev with specifics.
|
|
228
235
|
If verification passes, hand off to Reviewer for re-review.
|
|
229
236
|
gate:
|
|
237
|
+
file: gates/quality-pass
|
|
230
238
|
type: quality_pass
|
|
231
239
|
condition: >
|
|
232
240
|
All project quality gates pass. Each review finding verified
|
|
@@ -255,6 +263,7 @@ workflow:
|
|
|
255
263
|
5. Only after user approves: create PR (draft by default,
|
|
256
264
|
or per user pr_mode preference in pennyfarthing config)
|
|
257
265
|
gate:
|
|
266
|
+
file: gates/approval
|
|
258
267
|
type: approval
|
|
259
268
|
condition: User has reviewed and approved PR content before submission
|
|
260
269
|
|
|
@@ -315,6 +324,7 @@ workflow:
|
|
|
315
324
|
|
|
316
325
|
Present decisions to user. User has final say on every item.
|
|
317
326
|
gate:
|
|
327
|
+
file: gates/approval
|
|
318
328
|
type: approval
|
|
319
329
|
condition: User has decided on every external review comment
|
|
320
330
|
|
|
@@ -340,6 +350,7 @@ workflow:
|
|
|
340
350
|
|
|
341
351
|
Commit fixes. Push branch. Present all draft replies to user.
|
|
342
352
|
gate:
|
|
353
|
+
file: gates/approval
|
|
343
354
|
type: approval
|
|
344
355
|
condition: >
|
|
345
356
|
User has approved every draft reply. Fixes pass quality
|
|
@@ -28,6 +28,7 @@ workflow:
|
|
|
28
28
|
input: [audit_report, proposed_changes]
|
|
29
29
|
output: [updated_files]
|
|
30
30
|
gate:
|
|
31
|
+
file: gates/validation
|
|
31
32
|
type: validation
|
|
32
33
|
condition: Agent files parse correctly, no broken references
|
|
33
34
|
|
|
@@ -36,6 +37,7 @@ workflow:
|
|
|
36
37
|
input: [updated_files]
|
|
37
38
|
output: [approval]
|
|
38
39
|
gate:
|
|
40
|
+
file: gates/approval
|
|
39
41
|
type: approval
|
|
40
42
|
condition: |
|
|
41
43
|
Documentation quality review:
|
|
@@ -21,6 +21,7 @@ workflow:
|
|
|
21
21
|
input: [session_file, story_context]
|
|
22
22
|
output: [design_spec, user_flows, wireframes, behavior_scenarios]
|
|
23
23
|
gate:
|
|
24
|
+
file: gates/design-review
|
|
24
25
|
type: design_review
|
|
25
26
|
condition: UX spec defines user flows and acceptance behaviors
|
|
26
27
|
tandem:
|
|
@@ -32,6 +33,7 @@ workflow:
|
|
|
32
33
|
input: [design_spec, behavior_scenarios, story_context]
|
|
33
34
|
output: [failing_tests]
|
|
34
35
|
gate:
|
|
36
|
+
file: gates/tests-fail
|
|
35
37
|
type: tests_fail
|
|
36
38
|
condition: Behavior scenarios have test coverage
|
|
37
39
|
|
|
@@ -40,6 +42,7 @@ workflow:
|
|
|
40
42
|
input: [failing_tests, design_spec, story_context]
|
|
41
43
|
output: [implementation, passing_tests]
|
|
42
44
|
gate:
|
|
45
|
+
file: gates/tests-pass
|
|
43
46
|
type: tests_pass
|
|
44
47
|
condition: All tests passing, UX spec implemented
|
|
45
48
|
tandem:
|
|
@@ -51,6 +54,7 @@ workflow:
|
|
|
51
54
|
input: [implementation, passing_tests, design_spec]
|
|
52
55
|
output: [approval]
|
|
53
56
|
gate:
|
|
57
|
+
file: gates/approval
|
|
54
58
|
type: approval
|
|
55
59
|
condition: Code review approved, UX requirements met
|
|
56
60
|
tandem:
|
|
@@ -19,6 +19,7 @@ workflow:
|
|
|
19
19
|
input: [session_file, story_context]
|
|
20
20
|
output: [design_spec, user_flows, wireframes, behavior_scenarios]
|
|
21
21
|
gate:
|
|
22
|
+
file: gates/design-review
|
|
22
23
|
type: design_review
|
|
23
24
|
condition: UX spec defines user flows and acceptance behaviors
|
|
24
25
|
|
|
@@ -27,6 +28,7 @@ workflow:
|
|
|
27
28
|
input: [design_spec, behavior_scenarios, story_context]
|
|
28
29
|
output: [failing_tests]
|
|
29
30
|
gate:
|
|
31
|
+
file: gates/tests-fail
|
|
30
32
|
type: tests_fail
|
|
31
33
|
condition: Behavior scenarios have test coverage
|
|
32
34
|
|
|
@@ -35,6 +37,7 @@ workflow:
|
|
|
35
37
|
input: [failing_tests, design_spec, story_context]
|
|
36
38
|
output: [implementation, passing_tests]
|
|
37
39
|
gate:
|
|
40
|
+
file: gates/tests-pass
|
|
38
41
|
type: tests_pass
|
|
39
42
|
condition: All tests passing, UX spec implemented
|
|
40
43
|
|
|
@@ -43,6 +46,7 @@ workflow:
|
|
|
43
46
|
input: [implementation, passing_tests, design_spec]
|
|
44
47
|
output: [approval]
|
|
45
48
|
gate:
|
|
49
|
+
file: gates/approval
|
|
46
50
|
type: approval
|
|
47
51
|
condition: Code review approved, UX requirements met
|
|
48
52
|
|
|
@@ -21,6 +21,7 @@ workflow:
|
|
|
21
21
|
input: [session_file, story_context]
|
|
22
22
|
output: [failing_tests]
|
|
23
23
|
gate:
|
|
24
|
+
file: gates/tests-fail
|
|
24
25
|
type: tests_fail
|
|
25
26
|
condition: All acceptance criteria have test coverage
|
|
26
27
|
tandem:
|
|
@@ -32,6 +33,7 @@ workflow:
|
|
|
32
33
|
input: [failing_tests, story_context]
|
|
33
34
|
output: [implementation, passing_tests]
|
|
34
35
|
gate:
|
|
36
|
+
file: gates/tests-pass
|
|
35
37
|
type: tests_pass
|
|
36
38
|
condition: All tests passing, no skipped tests
|
|
37
39
|
tandem:
|
|
@@ -43,6 +45,7 @@ workflow:
|
|
|
43
45
|
input: [implementation, passing_tests]
|
|
44
46
|
output: [approval]
|
|
45
47
|
gate:
|
|
48
|
+
file: gates/approval
|
|
46
49
|
type: approval
|
|
47
50
|
condition: Code review approved, no blocking issues
|
|
48
51
|
tandem:
|
|
@@ -19,6 +19,7 @@ workflow:
|
|
|
19
19
|
input: [session_file, story_context]
|
|
20
20
|
output: [failing_tests]
|
|
21
21
|
gate:
|
|
22
|
+
file: gates/tests-fail
|
|
22
23
|
type: tests_fail
|
|
23
24
|
condition: All acceptance criteria have test coverage
|
|
24
25
|
|
|
@@ -27,6 +28,7 @@ workflow:
|
|
|
27
28
|
input: [failing_tests, story_context]
|
|
28
29
|
output: [implementation, passing_tests]
|
|
29
30
|
gate:
|
|
31
|
+
file: gates/tests-pass
|
|
30
32
|
type: tests_pass
|
|
31
33
|
condition: All tests passing, no skipped tests
|
|
32
34
|
|
|
@@ -35,6 +37,7 @@ workflow:
|
|
|
35
37
|
input: [implementation, passing_tests]
|
|
36
38
|
output: [approval]
|
|
37
39
|
gate:
|
|
40
|
+
file: gates/approval
|
|
38
41
|
type: approval
|
|
39
42
|
condition: Code review approved, no blocking issues
|
|
40
43
|
|
|
@@ -19,6 +19,7 @@ workflow:
|
|
|
19
19
|
input: [session_file]
|
|
20
20
|
output: [implementation]
|
|
21
21
|
gate:
|
|
22
|
+
file: gates/tests-pass
|
|
22
23
|
type: tests_pass
|
|
23
24
|
condition: Existing tests still pass
|
|
24
25
|
|
|
@@ -27,6 +28,7 @@ workflow:
|
|
|
27
28
|
input: [implementation]
|
|
28
29
|
output: [approval]
|
|
29
30
|
gate:
|
|
31
|
+
file: gates/approval
|
|
30
32
|
type: approval
|
|
31
33
|
|
|
32
34
|
- name: finish
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""ChangedPanel — Changed file list with status for BikeRack TUI.
|
|
2
|
+
|
|
3
|
+
Story 103-14: Subscribes to /ws/git, extracts dirtyFiles from all repos,
|
|
4
|
+
renders Rich table with file path, change type icon, and status.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from rich.table import Table
|
|
12
|
+
from rich.text import Text
|
|
13
|
+
|
|
14
|
+
from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel
|
|
15
|
+
|
|
16
|
+
# Status code → (icon, label, style)
|
|
17
|
+
_STATUS_MAP: dict[str, tuple[str, str, str]] = {
|
|
18
|
+
"M": ("~", "Modified", "yellow"),
|
|
19
|
+
"A": ("+", "Added", "green"),
|
|
20
|
+
"D": ("-", "Deleted", "red"),
|
|
21
|
+
"?": ("?", "Untracked", "dim"),
|
|
22
|
+
"R": ("→", "Renamed", "cyan"),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
_DEFAULT_STATUS: tuple[str, str, str] = ("·", "Changed", "yellow")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _parse_status(status: str) -> tuple[str, str, str]:
|
|
29
|
+
"""Parse 2-char git status code into (icon, label, style).
|
|
30
|
+
|
|
31
|
+
First char = index (staging area), second char = working tree.
|
|
32
|
+
Uses the most significant non-space character.
|
|
33
|
+
"""
|
|
34
|
+
if len(status) < 2:
|
|
35
|
+
return _STATUS_MAP.get(status[:1], _DEFAULT_STATUS)
|
|
36
|
+
|
|
37
|
+
idx, wt = status[0], status[1]
|
|
38
|
+
|
|
39
|
+
# Untracked: both chars are '?'
|
|
40
|
+
if idx == "?" and wt == "?":
|
|
41
|
+
return _STATUS_MAP["?"]
|
|
42
|
+
|
|
43
|
+
# Index change takes priority if present
|
|
44
|
+
if idx not in (" ", "?"):
|
|
45
|
+
return _STATUS_MAP.get(idx, _DEFAULT_STATUS)
|
|
46
|
+
|
|
47
|
+
# Working tree change
|
|
48
|
+
if wt not in (" ", "?"):
|
|
49
|
+
return _STATUS_MAP.get(wt, _DEFAULT_STATUS)
|
|
50
|
+
|
|
51
|
+
return _DEFAULT_STATUS
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ChangedPanel(BasePanel):
|
|
55
|
+
"""Changed file list panel.
|
|
56
|
+
|
|
57
|
+
Subscribes to the ``git`` WebSocket channel and renders
|
|
58
|
+
dirty files from all repos as a Rich table with file path,
|
|
59
|
+
change type icon, and status.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
channel: str = "git"
|
|
63
|
+
panel_name: str = "Changed"
|
|
64
|
+
icon: str = PANEL_ICONS["changed"][0]
|
|
65
|
+
|
|
66
|
+
def render_panel(self, payload: dict[str, Any]) -> Any:
|
|
67
|
+
"""Render changed file data from WebSocket payload."""
|
|
68
|
+
repos = payload.get("repos", [])
|
|
69
|
+
if not isinstance(repos, list):
|
|
70
|
+
return Text("No changed files", style="dim italic")
|
|
71
|
+
|
|
72
|
+
files: list[tuple[str, dict[str, Any]]] = []
|
|
73
|
+
for repo in repos:
|
|
74
|
+
if not isinstance(repo, dict):
|
|
75
|
+
continue
|
|
76
|
+
repo_name = repo.get("name", "")
|
|
77
|
+
dirty_files = repo.get("dirtyFiles", [])
|
|
78
|
+
if not isinstance(dirty_files, list):
|
|
79
|
+
continue
|
|
80
|
+
for f in dirty_files:
|
|
81
|
+
if not isinstance(f, dict):
|
|
82
|
+
continue
|
|
83
|
+
files.append((repo_name, f))
|
|
84
|
+
|
|
85
|
+
if not files:
|
|
86
|
+
return Text("No changed files", style="dim italic")
|
|
87
|
+
|
|
88
|
+
table = Table()
|
|
89
|
+
table.add_column("", width=2)
|
|
90
|
+
table.add_column("File", style="cyan")
|
|
91
|
+
table.add_column("Status")
|
|
92
|
+
table.add_column("Repo", style="dim")
|
|
93
|
+
|
|
94
|
+
for repo_name, f in files:
|
|
95
|
+
status_code = f.get("status", " ")
|
|
96
|
+
path = f.get("path", "")
|
|
97
|
+
icon, label, style = _parse_status(status_code)
|
|
98
|
+
table.add_row(
|
|
99
|
+
Text(icon, style=f"bold {style}"),
|
|
100
|
+
path,
|
|
101
|
+
Text(label, style=style),
|
|
102
|
+
repo_name,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
return table
|