@pennyfarthing/core 11.1.0 → 11.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 +8 -8
- package/package.json +16 -14
- package/packages/core/dist/cli/utils/constants.d.ts +1 -1
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +2 -1
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.d.ts +75 -0
- package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.js +334 -0
- package/packages/core/dist/consultation/dialogue-manager.js.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.test.d.ts +19 -0
- package/packages/core/dist/consultation/dialogue-manager.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.test.js +444 -0
- package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -0
- package/packages/core/dist/server/api/git.d.ts +13 -1
- package/packages/core/dist/server/api/git.d.ts.map +1 -1
- package/packages/core/dist/server/api/git.js +53 -34
- package/packages/core/dist/server/api/git.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.d.ts +16 -11
- package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
- package/packages/core/dist/server/otlp-receiver.js +185 -24
- package/packages/core/dist/server/otlp-receiver.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.test.d.ts +21 -0
- package/packages/core/dist/server/otlp-receiver.test.d.ts.map +1 -0
- package/packages/core/dist/server/otlp-receiver.test.js +446 -0
- package/packages/core/dist/server/otlp-receiver.test.js.map +1 -0
- package/packages/core/dist/shared/portrait-resolver.d.ts +9 -0
- package/packages/core/dist/shared/portrait-resolver.d.ts.map +1 -1
- package/packages/core/dist/shared/portrait-resolver.js +27 -0
- package/packages/core/dist/shared/portrait-resolver.js.map +1 -1
- package/packages/core/dist/shared/portrait-resolver.test.js +47 -1
- package/packages/core/dist/shared/portrait-resolver.test.js.map +1 -1
- package/packages/core/dist/shared/skill-search.test.js +2 -2
- package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts +13 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts.map +1 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.js +126 -0
- package/packages/core/dist/shared/tandem-portrait-inventory.test.js.map +1 -0
- package/pennyfarthing-dist/agents/dev.md +1 -1
- package/pennyfarthing-dist/agents/reviewer.md +1 -1
- package/pennyfarthing-dist/agents/sm-setup.md +1 -1
- package/pennyfarthing-dist/agents/sm.md +2 -2
- package/pennyfarthing-dist/agents/tea.md +1 -1
- package/pennyfarthing-dist/agents/testing-runner.md +2 -1
- package/pennyfarthing-dist/commands/pf-chore.md +2 -2
- package/pennyfarthing-dist/commands/pf-standalone.md +7 -2
- package/pennyfarthing-dist/guides/agent-behavior.md +1 -1
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +1 -1
- package/pennyfarthing-dist/guides/bikerack.md +3 -3
- package/pennyfarthing-dist/guides/hooks.md +1 -1
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +2 -2
- package/pennyfarthing-dist/scripts/README.md +1 -1
- package/pennyfarthing-dist/scripts/core/agent-session.sh +0 -0
- package/pennyfarthing-dist/scripts/core/check-context.sh +1 -1
- package/pennyfarthing-dist/scripts/core/dialogue-manager.sh +322 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +0 -0
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
- package/pennyfarthing-dist/scripts/git/README.md +24 -14
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +5 -266
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +5 -151
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +6 -144
- package/pennyfarthing-dist/scripts/git/release.sh +0 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +5 -496
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/README.md +1 -1
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +1 -1
- 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 +9 -11
- 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 +1 -1
- 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.sh +0 -0
- package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +76 -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 +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 +4 -221
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +5 -13
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +4 -123
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +4 -33
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +4 -156
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +4 -131
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +4 -249
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +4 -160
- package/pennyfarthing-dist/skills/pf-bc/usage.md +1 -1
- package/pennyfarthing-dist/skills/pf-jira/examples.md +5 -2
- 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-workflow/examples.md +27 -16
- package/pennyfarthing-dist/skills/pf-workflow/skill.md +9 -12
- package/pennyfarthing-dist/skills/pf-workflow/usage.md +33 -8
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +18 -6
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
- package/pennyfarthing-dist/workflows/review-tandem.yaml +65 -0
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +16 -8
- package/pennyfarthing_scripts/CLAUDE.md +26 -4
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/cli.py +3 -5
- 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__/portrait.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.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/background_panel.py +86 -5
- package/pennyfarthing_scripts/bikerack/base_panel.py +62 -0
- package/pennyfarthing_scripts/bikerack/changed_panel.py +32 -28
- package/pennyfarthing_scripts/bikerack/cli.py +10 -11
- package/pennyfarthing_scripts/bikerack/debug_panel.py +31 -1
- package/pennyfarthing_scripts/bikerack/diffs_panel.py +74 -17
- package/pennyfarthing_scripts/bikerack/git_panel.py +103 -33
- package/pennyfarthing_scripts/bikerack/launcher.py +15 -15
- package/pennyfarthing_scripts/bikerack/progress_panel.py +315 -0
- package/pennyfarthing_scripts/bikerack/sprint_panel.py +158 -26
- package/pennyfarthing_scripts/bikerack/tui.py +336 -30
- package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
- package/pennyfarthing_scripts/cli.py +37 -65
- package/pennyfarthing_scripts/consultation/__init__.py +1 -0
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/cli.py +149 -0
- package/pennyfarthing_scripts/consultation/dialogue_manager.py +417 -0
- package/pennyfarthing_scripts/context.py +3 -3
- package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__init__.py +12 -1
- 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__/hooks_installer.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/worktree.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/create_branches.py +3 -4
- package/pennyfarthing_scripts/git/hooks_installer.py +152 -0
- package/pennyfarthing_scripts/git/repos.py +196 -0
- package/pennyfarthing_scripts/git/status_all.py +27 -11
- package/pennyfarthing_scripts/git/worktree.py +302 -0
- package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/cli.py +143 -40
- 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__/resolve_gate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/complete_phase.py +12 -0
- package/pennyfarthing_scripts/handoff/resolve_gate.py +5 -14
- package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
- package/pennyfarthing_scripts/hooks.py +3 -17
- package/pennyfarthing_scripts/pretooluse_hook.py +1 -1
- package/pennyfarthing_scripts/prime/__pycache__/heatmap.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/heatmap.py +655 -0
- package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/session/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/session_start_hook.py +1 -1
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/loader.py +15 -1
- package/pennyfarthing_scripts/sprint/story_finish.py +14 -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_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/test_bikerack.py +51 -51
- package/pennyfarthing_scripts/tests/test_dialogue_manager.py +811 -0
- package/pennyfarthing_scripts/tests/test_handoff_cli.py +16 -11
- package/pennyfarthing_scripts/tests/test_workflow_check.py +2 -3
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/tandem_awareness.py +254 -0
- package/pennyfarthing_scripts/validate/cli.py +17 -5
- package/pennyfarthing_scripts/workflow/__init__.py +40 -0
- package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/cli.py +1099 -0
- package/pennyfarthing_scripts/workflow/helpers.py +241 -0
- package/pennyfarthing_scripts/{workflow.py → workflow/scale.py} +0 -104
- package/pennyfarthing_scripts/workflow/state.py +112 -0
- package/scripts/README.md +41 -0
- package/pennyfarthing-dist/skills/pf-workflow/scripts/list-workflows.sh +0 -91
- package/pennyfarthing-dist/skills/pf-workflow/scripts/resume-workflow.sh +0 -163
- package/pennyfarthing-dist/skills/pf-workflow/scripts/show-workflow.sh +0 -138
- package/pennyfarthing-dist/skills/pf-workflow/scripts/start-workflow.sh +0 -273
- package/pennyfarthing-dist/skills/pf-workflow/scripts/workflow-status.sh +0 -167
|
@@ -1,161 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
# Find project root
|
|
10
|
-
source "$(dirname "${BASH_SOURCE[0]}")/../lib/find-root.sh"
|
|
11
|
-
|
|
12
|
-
WORKFLOWS_DIR="$PROJECT_ROOT/.pennyfarthing/workflows"
|
|
13
|
-
SESSION_DIR="$PROJECT_ROOT/.session"
|
|
14
|
-
|
|
15
|
-
if ! command -v yq &> /dev/null; then
|
|
16
|
-
echo "Error: yq is required but not installed"
|
|
17
|
-
echo "Install with: brew install yq"
|
|
18
|
-
exit 1
|
|
19
|
-
fi
|
|
20
|
-
|
|
21
|
-
WORKFLOW_NAME="${1:-}"
|
|
22
|
-
|
|
23
|
-
# If no name, try to detect from session
|
|
24
|
-
if [[ -z "$WORKFLOW_NAME" ]]; then
|
|
25
|
-
SESSION_FILE=$(find "$SESSION_DIR" -maxdepth 1 -name "*-workflow-session.md" 2>/dev/null | head -1)
|
|
26
|
-
|
|
27
|
-
if [[ -z "$SESSION_FILE" ]]; then
|
|
28
|
-
echo "# Workflow Status"
|
|
29
|
-
echo ""
|
|
30
|
-
echo "No active workflow session found."
|
|
31
|
-
echo ""
|
|
32
|
-
echo "Use \`/workflow start <name>\` to begin a new workflow."
|
|
33
|
-
exit 0
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
WORKFLOW_NAME=$(grep -E "^\*\*Workflow:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/\*\*Workflow:\*\* //' | tr -d ' ')
|
|
37
|
-
|
|
38
|
-
if [[ -z "$WORKFLOW_NAME" ]]; then
|
|
39
|
-
WORKFLOW_NAME=$(basename "$SESSION_FILE" | sed 's/-workflow-session.md//')
|
|
40
|
-
fi
|
|
41
|
-
else
|
|
42
|
-
SESSION_FILE="$SESSION_DIR/${WORKFLOW_NAME}-workflow-session.md"
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
if [[ ! -f "$SESSION_FILE" ]]; then
|
|
46
|
-
echo "# Workflow Status: $WORKFLOW_NAME"
|
|
47
|
-
echo ""
|
|
48
|
-
echo "No session found for workflow '$WORKFLOW_NAME'"
|
|
49
|
-
echo ""
|
|
50
|
-
echo "Use \`/workflow start $WORKFLOW_NAME\` to begin."
|
|
51
|
-
exit 0
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
# Find workflow file
|
|
55
|
-
WORKFLOW_FILE=""
|
|
56
|
-
if [[ -f "$WORKFLOWS_DIR/${WORKFLOW_NAME}.yaml" ]]; then
|
|
57
|
-
WORKFLOW_FILE="$WORKFLOWS_DIR/${WORKFLOW_NAME}.yaml"
|
|
58
|
-
elif [[ -f "$WORKFLOWS_DIR/${WORKFLOW_NAME}/workflow.yaml" ]]; then
|
|
59
|
-
WORKFLOW_FILE="$WORKFLOWS_DIR/${WORKFLOW_NAME}/workflow.yaml"
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
WORKFLOW_DIR=$(dirname "$WORKFLOW_FILE")
|
|
63
|
-
|
|
64
|
-
# Parse session state
|
|
65
|
-
CURRENT_STEP=$(grep -E "^\- \*\*Current Step:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "1")
|
|
66
|
-
MODE=$(grep -E "^\- \*\*Mode:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "create")
|
|
67
|
-
STATUS=$(grep -E "^\- \*\*Status:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "in_progress")
|
|
68
|
-
STARTED=$(grep -E "^\- \*\*Started:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "-")
|
|
69
|
-
LAST_UPDATED=$(grep -E "^\- \*\*Last Updated:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "-")
|
|
70
|
-
STEPS_COMPLETED=$(grep -E "^\- \*\*Steps Completed:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "[]")
|
|
71
|
-
NOTES=$(grep -E "^\- \*\*Notes:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "-")
|
|
72
|
-
|
|
73
|
-
# Get total steps from workflow
|
|
74
|
-
if [[ -n "$WORKFLOW_FILE" && -f "$WORKFLOW_FILE" ]]; then
|
|
75
|
-
# Resolve steps path based on mode
|
|
76
|
-
MODE_PATH=$(yq eval ".workflow.modes.$MODE // \"\"" "$WORKFLOW_FILE")
|
|
77
|
-
if [[ -n "$MODE_PATH" && "$MODE_PATH" != "null" ]]; then
|
|
78
|
-
STEPS_PATH="$MODE_PATH"
|
|
79
|
-
else
|
|
80
|
-
STEPS_PATH=$(yq eval '.workflow.steps.path' "$WORKFLOW_FILE")
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
# Resolve relative path
|
|
84
|
-
if [[ "$STEPS_PATH" == ./* ]]; then
|
|
85
|
-
STEPS_PATH="$WORKFLOW_DIR/${STEPS_PATH#./}"
|
|
86
|
-
elif [[ "$STEPS_PATH" != /* ]]; then
|
|
87
|
-
STEPS_PATH="$PROJECT_ROOT/$STEPS_PATH"
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
STEP_COUNT=$(find "$STEPS_PATH" -maxdepth 1 -name "step-0*.md" -o -name "step-1*.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
91
|
-
WORKFLOW_DESC=$(yq eval '.workflow.description' "$WORKFLOW_FILE" | head -1)
|
|
92
|
-
else
|
|
93
|
-
STEP_COUNT="?"
|
|
94
|
-
WORKFLOW_DESC="-"
|
|
95
|
-
fi
|
|
96
|
-
|
|
97
|
-
# Calculate completion percentage
|
|
98
|
-
COMPLETED_COUNT=$(echo "$STEPS_COMPLETED" | tr -cd ',' | wc -c | tr -d ' ')
|
|
99
|
-
if [[ "$STEPS_COMPLETED" != "[]" && -n "$STEPS_COMPLETED" ]]; then
|
|
100
|
-
COMPLETED_COUNT=$((COMPLETED_COUNT + 1))
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
if [[ "$STEP_COUNT" != "?" && "$STEP_COUNT" -gt 0 ]]; then
|
|
104
|
-
COMPLETION_PCT=$((COMPLETED_COUNT * 100 / STEP_COUNT))
|
|
105
|
-
else
|
|
106
|
-
COMPLETION_PCT=0
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
# Build progress bar
|
|
110
|
-
BAR_WIDTH=20
|
|
111
|
-
if [[ "$STEP_COUNT" != "?" && "$STEP_COUNT" -gt 0 ]]; then
|
|
112
|
-
FILLED=$((COMPLETION_PCT * BAR_WIDTH / 100))
|
|
113
|
-
EMPTY=$((BAR_WIDTH - FILLED))
|
|
114
|
-
PROGRESS_BAR=$(printf '%*s' "$FILLED" '' | tr ' ' '#')$(printf '%*s' "$EMPTY" '' | tr ' ' '-')
|
|
115
|
-
else
|
|
116
|
-
PROGRESS_BAR=$(printf '%*s' "$BAR_WIDTH" '' | tr ' ' '?')
|
|
117
|
-
fi
|
|
118
|
-
|
|
119
|
-
# Status indicator
|
|
120
|
-
case "$STATUS" in
|
|
121
|
-
completed)
|
|
122
|
-
STATUS_ICON="[COMPLETE]"
|
|
123
|
-
;;
|
|
124
|
-
paused)
|
|
125
|
-
STATUS_ICON="[PAUSED]"
|
|
126
|
-
;;
|
|
127
|
-
*)
|
|
128
|
-
STATUS_ICON="[IN PROGRESS]"
|
|
129
|
-
;;
|
|
130
|
-
esac
|
|
131
|
-
|
|
132
|
-
# Output status
|
|
133
|
-
echo "# Workflow Status: $WORKFLOW_NAME"
|
|
134
|
-
echo ""
|
|
135
|
-
echo "**Description:** $WORKFLOW_DESC"
|
|
136
|
-
echo ""
|
|
137
|
-
echo "## Progress"
|
|
138
|
-
echo ""
|
|
139
|
-
echo "\`\`\`"
|
|
140
|
-
echo "[$PROGRESS_BAR] $COMPLETION_PCT%"
|
|
141
|
-
echo "\`\`\`"
|
|
142
|
-
echo ""
|
|
143
|
-
echo "| Field | Value |"
|
|
144
|
-
echo "|-------|-------|"
|
|
145
|
-
echo "| Status | $STATUS_ICON |"
|
|
146
|
-
echo "| Mode | $MODE |"
|
|
147
|
-
echo "| Current Step | $CURRENT_STEP of $STEP_COUNT |"
|
|
148
|
-
echo "| Completed | $COMPLETED_COUNT steps |"
|
|
149
|
-
echo "| Steps Done | $STEPS_COMPLETED |"
|
|
150
|
-
echo "| Started | $STARTED |"
|
|
151
|
-
echo "| Last Updated | $LAST_UPDATED |"
|
|
152
|
-
if [[ "$NOTES" != "-" ]]; then
|
|
153
|
-
echo "| Notes | $NOTES |"
|
|
154
|
-
fi
|
|
155
|
-
echo ""
|
|
156
|
-
echo "**Session:** $SESSION_FILE"
|
|
157
|
-
echo ""
|
|
158
|
-
|
|
159
|
-
if [[ "$STATUS" != "completed" ]]; then
|
|
160
|
-
echo "**Next:** Use \`/workflow resume\` to continue from step $CURRENT_STEP"
|
|
161
|
-
fi
|
|
2
|
+
# DEPRECATED: Use `pf workflow status` instead.
|
|
3
|
+
# This shim forwards to the Python CLI for backward compatibility.
|
|
4
|
+
echo "Warning: workflow-status.sh is deprecated. Use: pf workflow status $*" >&2
|
|
5
|
+
exec pf workflow status "$@"
|
|
@@ -57,7 +57,7 @@ pf bc save <NAME> [--dry-run]
|
|
|
57
57
|
| `NAME` | Yes | Layout name to save as |
|
|
58
58
|
| `--dry-run` | No | Preview without making changes |
|
|
59
59
|
|
|
60
|
-
Fetches the active layout from the running Cyclist/BikeRack server (
|
|
60
|
+
Fetches the active layout from the running Cyclist/BikeRack server (reads `.wheelhub-port`). Fails if no server is running.
|
|
61
61
|
|
|
62
62
|
Output: `{"success": true, "name": "<name>", "panels": <count>}`
|
|
63
63
|
|
|
@@ -129,11 +129,14 @@ pf jira reconcile --fix
|
|
|
129
129
|
## Sprint Management
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
+
# Read sprint ID from current-sprint.yaml (never hardcode)
|
|
133
|
+
SPRINT_ID=$(grep 'jira_sprint_id:' sprint/current-sprint.yaml | awk '{print $2}')
|
|
134
|
+
|
|
132
135
|
# Add issue to sprint
|
|
133
|
-
pf jira sprint add
|
|
136
|
+
pf jira sprint add "$SPRINT_ID" MSSCI-11999
|
|
134
137
|
|
|
135
138
|
# Preview
|
|
136
|
-
pf jira sprint add
|
|
139
|
+
pf jira sprint add "$SPRINT_ID" MSSCI-11999 --dry-run
|
|
137
140
|
```
|
|
138
141
|
|
|
139
142
|
## Common Workflows
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
# List all available workflows
|
|
7
|
-
|
|
7
|
+
pf workflow list
|
|
8
8
|
|
|
9
9
|
# Show TDD workflow details
|
|
10
|
-
|
|
10
|
+
pf workflow show tdd
|
|
11
11
|
|
|
12
12
|
# Show current session's workflow
|
|
13
|
-
|
|
13
|
+
pf workflow show
|
|
14
14
|
|
|
15
15
|
# Show trivial workflow
|
|
16
|
-
|
|
16
|
+
pf workflow show trivial
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
## Checking State
|
|
19
|
+
## Checking State
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
# Check current workflow state
|
|
@@ -31,6 +31,13 @@ pf workflow phase-check tdd review
|
|
|
31
31
|
pf workflow phase-check trivial implement
|
|
32
32
|
# Returns: dev
|
|
33
33
|
|
|
34
|
+
# Get workflow type
|
|
35
|
+
pf workflow type tdd
|
|
36
|
+
# Returns: phased
|
|
37
|
+
|
|
38
|
+
pf workflow type architecture
|
|
39
|
+
# Returns: stepped
|
|
40
|
+
|
|
34
41
|
# Emit handoff marker for Cyclist
|
|
35
42
|
pf workflow handoff reviewer
|
|
36
43
|
```
|
|
@@ -39,40 +46,44 @@ pf workflow handoff reviewer
|
|
|
39
46
|
|
|
40
47
|
```bash
|
|
41
48
|
# Start architecture workflow in create mode (default)
|
|
42
|
-
|
|
49
|
+
pf workflow start architecture
|
|
43
50
|
|
|
44
51
|
# Start in validate mode
|
|
45
|
-
|
|
52
|
+
pf workflow start architecture --mode validate
|
|
46
53
|
|
|
47
54
|
# Check progress
|
|
48
|
-
|
|
55
|
+
pf workflow status
|
|
49
56
|
|
|
50
57
|
# Resume after interruption
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
pf workflow resume
|
|
59
|
+
pf workflow resume architecture
|
|
60
|
+
|
|
61
|
+
# Complete current step and advance
|
|
62
|
+
pf workflow complete-step
|
|
63
|
+
pf workflow complete-step architecture --step 3
|
|
53
64
|
```
|
|
54
65
|
|
|
55
66
|
## Phase Repair
|
|
56
67
|
|
|
57
68
|
```bash
|
|
58
69
|
# Preview phase fix
|
|
59
|
-
|
|
70
|
+
pf workflow fix-phase 56-1 review --dry-run
|
|
60
71
|
|
|
61
72
|
# Fix phase to review (after Dev completed)
|
|
62
|
-
|
|
73
|
+
pf workflow fix-phase 56-1 review
|
|
63
74
|
|
|
64
75
|
# Fix phase to approved (after Reviewer approved)
|
|
65
|
-
|
|
76
|
+
pf workflow fix-phase 56-1 approved
|
|
66
77
|
|
|
67
78
|
# Using Jira key
|
|
68
|
-
|
|
79
|
+
pf workflow fix-phase MSSCI-12190 approved
|
|
69
80
|
```
|
|
70
81
|
|
|
71
82
|
## Switching Workflow Mid-Session
|
|
72
83
|
|
|
73
84
|
1. Verify the target workflow exists:
|
|
74
85
|
```bash
|
|
75
|
-
|
|
86
|
+
pf workflow show trivial
|
|
76
87
|
```
|
|
77
88
|
|
|
78
89
|
2. Edit the session file:
|
|
@@ -89,7 +100,7 @@ pf workflow handoff reviewer
|
|
|
89
100
|
pf workflow check --json
|
|
90
101
|
# Edit session to change workflow from trivial to tdd
|
|
91
102
|
# Fix phase to match where you are
|
|
92
|
-
|
|
103
|
+
pf workflow fix-phase 56-1 red
|
|
93
104
|
```
|
|
94
105
|
|
|
95
106
|
### Agent activated on wrong phase
|
|
@@ -11,25 +11,22 @@ Pennyfarthing uses YAML-defined workflows to control agent sequences. The defaul
|
|
|
11
11
|
|
|
12
12
|
## Quick Reference
|
|
13
13
|
|
|
14
|
-
### Shell Script Commands
|
|
15
|
-
|
|
16
|
-
| Command | Script | Purpose |
|
|
17
|
-
|---------|--------|---------|
|
|
18
|
-
| `/pf-workflow` or `/pf-workflow list` | `.pennyfarthing/scripts/workflow/list-workflows.sh` | List all workflows |
|
|
19
|
-
| `/pf-workflow show [name]` | `.pennyfarthing/scripts/workflow/show-workflow.sh [name]` | Show workflow details |
|
|
20
|
-
| `/pf-workflow set <name>` | Edit session file `**Workflow:**` line | Switch workflow mid-session |
|
|
21
|
-
| `/pf-workflow start <name>` | `.pennyfarthing/scripts/workflow/start-workflow.sh <name> [--mode M]` | Start stepped workflow |
|
|
22
|
-
| `/pf-workflow resume [name]` | `.pennyfarthing/scripts/workflow/resume-workflow.sh [name]` | Resume interrupted workflow |
|
|
23
|
-
| `/pf-workflow status` | `.pennyfarthing/scripts/workflow/workflow-status.sh` | Show stepped workflow progress |
|
|
24
|
-
| `/pf-workflow fix-phase <id> <phase>` | `.pennyfarthing/scripts/workflow/fix-session-phase.sh <id> <phase> [--dry-run]` | Repair session phase |
|
|
25
|
-
|
|
26
14
|
### Python CLI Commands
|
|
27
15
|
|
|
28
16
|
| Command | CLI | Purpose |
|
|
29
17
|
|---------|-----|---------|
|
|
18
|
+
| `/pf-workflow` or `/pf-workflow list` | `pf workflow list` | List all workflows |
|
|
19
|
+
| `/pf-workflow show [name]` | `pf workflow show [name]` | Show workflow details |
|
|
20
|
+
| `/pf-workflow set <name>` | Edit session file `**Workflow:**` line | Switch workflow mid-session |
|
|
21
|
+
| `/pf-workflow start <name>` | `pf workflow start <name> [--mode M]` | Start stepped workflow |
|
|
22
|
+
| `/pf-workflow resume [name]` | `pf workflow resume [name]` | Resume interrupted workflow |
|
|
23
|
+
| `/pf-workflow status` | `pf workflow status` | Show stepped workflow progress |
|
|
24
|
+
| `/pf-workflow fix-phase <id> <phase>` | `pf workflow fix-phase <id> <phase> [--dry-run]` | Repair session phase |
|
|
30
25
|
| Check workflow state | `pf workflow check [--json]` | Current story, phase, state |
|
|
31
26
|
| Check phase owner | `pf workflow phase-check <workflow> <phase>` | Which agent owns a phase |
|
|
27
|
+
| Get workflow type | `pf workflow type <workflow>` | phased/stepped/procedural |
|
|
32
28
|
| Emit handoff marker | `pf workflow handoff <next-agent>` | CYCLIST handoff marker |
|
|
29
|
+
| Complete step | `pf workflow complete-step [name] [--step N]` | Advance stepped workflow |
|
|
33
30
|
|
|
34
31
|
### Built-in Workflows
|
|
35
32
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Workflow — Detailed Usage
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Commands
|
|
4
4
|
|
|
5
5
|
### List Workflows
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
pf workflow list
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
No arguments. Returns table of workflows with type, phases/steps count, modes, default flag, description.
|
|
@@ -13,7 +13,7 @@ No arguments. Returns table of workflows with type, phases/steps count, modes, d
|
|
|
13
13
|
### Show Workflow
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
|
|
16
|
+
pf workflow show [NAME]
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
| Arg | Required | Description |
|
|
@@ -31,7 +31,7 @@ Warning: Only do this when story requirements have fundamentally changed. Switch
|
|
|
31
31
|
### Start Stepped Workflow
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
|
|
34
|
+
pf workflow start <NAME> [--mode <MODE>]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
| Arg/Option | Required | Description |
|
|
@@ -44,7 +44,7 @@ Creates a new session and begins at step 1.
|
|
|
44
44
|
### Resume Stepped Workflow
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
|
|
47
|
+
pf workflow resume [NAME]
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
| Arg | Required | Description |
|
|
@@ -54,7 +54,7 @@ Creates a new session and begins at step 1.
|
|
|
54
54
|
### Workflow Status
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
|
|
57
|
+
pf workflow status
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
No arguments. Shows current step, progress percentage, mode.
|
|
@@ -62,7 +62,7 @@ No arguments. Shows current step, progress percentage, mode.
|
|
|
62
62
|
### Fix Session Phase
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
|
|
65
|
+
pf workflow fix-phase <STORY_ID> <TARGET_PHASE> [--dry-run]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
| Arg/Option | Required | Description |
|
|
@@ -80,9 +80,22 @@ Valid phases by workflow:
|
|
|
80
80
|
|
|
81
81
|
Updates `**Phase:**` field, `**Phase Started:**` timestamp, and handoff history table.
|
|
82
82
|
|
|
83
|
+
### Complete Step
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
pf workflow complete-step [NAME] [--step N]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
| Arg/Option | Required | Description |
|
|
90
|
+
|------------|----------|-------------|
|
|
91
|
+
| `NAME` | No | Workflow name (auto-detects from session) |
|
|
92
|
+
| `--step N` | No | Complete specific step number instead of current |
|
|
93
|
+
|
|
94
|
+
Advances session: increments step, updates completed list, recalculates percentage.
|
|
95
|
+
|
|
83
96
|
---
|
|
84
97
|
|
|
85
|
-
##
|
|
98
|
+
## State & Phase Commands
|
|
86
99
|
|
|
87
100
|
### Check Workflow State
|
|
88
101
|
|
|
@@ -109,6 +122,18 @@ pf workflow phase-check <WORKFLOW_NAME> <PHASE>
|
|
|
109
122
|
|
|
110
123
|
Returns the agent name that owns the phase.
|
|
111
124
|
|
|
125
|
+
### Get Workflow Type
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pf workflow type <WORKFLOW_NAME>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| Arg | Required | Description |
|
|
132
|
+
|-----|----------|-------------|
|
|
133
|
+
| `WORKFLOW_NAME` | Yes | Workflow name (e.g., `tdd`, `architecture`) |
|
|
134
|
+
|
|
135
|
+
Returns `phased`, `stepped`, or `procedural`.
|
|
136
|
+
|
|
112
137
|
### Emit Handoff Marker
|
|
113
138
|
|
|
114
139
|
```bash
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
# BDD Tandem Workflow - BDD with Full Tandem Chain
|
|
2
|
-
# Extends standard BDD with tandem observers:
|
|
3
|
-
# - Architect backseats UX-Designer during design
|
|
4
|
-
# - UX-Designer backseats Dev during implementation
|
|
5
|
-
# - PM backseats Reviewer during review
|
|
6
2
|
#
|
|
7
|
-
#
|
|
3
|
+
# When to use: Best for UI/UX-heavy stories where designer-architect pairing
|
|
4
|
+
# shapes implementation. Use this instead of base bdd when the story involves
|
|
5
|
+
# complex user flows, new component patterns, or cross-domain UI integration.
|
|
6
|
+
#
|
|
7
|
+
# Tandem pairings:
|
|
8
|
+
# - DESIGN phase: UX-Designer + Architect (file-watch) — Architect validates technical feasibility
|
|
9
|
+
# - RED phase: TEA + Dev (file-watch) — Dev provides implementation context for test strategy
|
|
10
|
+
# - GREEN phase: Dev + UX-Designer (file-watch) — UX-Designer ensures design fidelity
|
|
11
|
+
# - REVIEW phase: Reviewer + PM (file-watch) — PM validates business requirements
|
|
12
|
+
#
|
|
13
|
+
# Compared to base bdd: Adds tandem observers on every working phase.
|
|
14
|
+
# Designer-developer pairing ensures UX intent survives implementation.
|
|
15
|
+
#
|
|
16
|
+
# Flow: SM → UX-Designer (+Architect) → TEA (+Dev) → Dev (+UX-Designer) → Reviewer (+PM) → SM
|
|
8
17
|
|
|
9
18
|
workflow:
|
|
10
19
|
name: bdd-tandem
|
|
11
|
-
description: BDD with full tandem chain
|
|
20
|
+
description: BDD with full tandem chain — designer and architect consultation across phases
|
|
12
21
|
version: "1.0.0"
|
|
13
22
|
|
|
14
23
|
phases:
|
|
@@ -36,6 +45,9 @@ workflow:
|
|
|
36
45
|
file: gates/tests-fail
|
|
37
46
|
type: tests_fail
|
|
38
47
|
condition: Behavior scenarios have test coverage
|
|
48
|
+
tandem:
|
|
49
|
+
partner: dev
|
|
50
|
+
scope: file-watch
|
|
39
51
|
|
|
40
52
|
- name: green
|
|
41
53
|
agent: dev
|
|
@@ -32,7 +32,7 @@ Build a complete picture of uncommitted changes across ALL repos defined in `.cl
|
|
|
32
32
|
**CRITICAL: Use the multi-repo script, not plain `git status`.**
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
|
-
|
|
35
|
+
pf git status
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
This shows branch, staged/unstaged changes, and unpushed commits for **all repos** defined in the project configuration.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Review Tandem Workflow - TDD with Focused Architectural Review
|
|
2
|
+
#
|
|
3
|
+
# When to use: Best for stories that primarily need architectural review during
|
|
4
|
+
# the review phase. Use this for large refactors (10+ pts), cross-cutting
|
|
5
|
+
# infrastructure changes, or stories where an architect audit catches issues
|
|
6
|
+
# that a standard code review might miss.
|
|
7
|
+
#
|
|
8
|
+
# Tandem pairings:
|
|
9
|
+
# - REVIEW phase: Reviewer + Architect (file-watch) — Architect provides
|
|
10
|
+
# focused architectural audit alongside standard code review
|
|
11
|
+
#
|
|
12
|
+
# Compared to base tdd: Same phase flow, but adds architect consultation
|
|
13
|
+
# during review only. Lighter than tdd-tandem (no tandem on red/green phases).
|
|
14
|
+
#
|
|
15
|
+
# Flow: SM → TEA → Dev → Reviewer (+Architect) → SM
|
|
16
|
+
|
|
17
|
+
workflow:
|
|
18
|
+
name: review-tandem
|
|
19
|
+
description: TDD with tandem architect consultation on review phase
|
|
20
|
+
version: "1.0.0"
|
|
21
|
+
|
|
22
|
+
phases:
|
|
23
|
+
- name: setup
|
|
24
|
+
agent: sm
|
|
25
|
+
output: [session_file, branches, story_context]
|
|
26
|
+
|
|
27
|
+
- name: red
|
|
28
|
+
agent: tea
|
|
29
|
+
input: [session_file, story_context]
|
|
30
|
+
output: [failing_tests]
|
|
31
|
+
gate:
|
|
32
|
+
file: gates/tests-fail
|
|
33
|
+
type: tests_fail
|
|
34
|
+
condition: All acceptance criteria have test coverage
|
|
35
|
+
|
|
36
|
+
- name: green
|
|
37
|
+
agent: dev
|
|
38
|
+
input: [failing_tests, story_context]
|
|
39
|
+
output: [implementation, passing_tests]
|
|
40
|
+
gate:
|
|
41
|
+
file: gates/tests-pass
|
|
42
|
+
type: tests_pass
|
|
43
|
+
condition: All tests passing, no skipped tests
|
|
44
|
+
|
|
45
|
+
- name: review
|
|
46
|
+
agent: reviewer
|
|
47
|
+
input: [implementation, passing_tests]
|
|
48
|
+
output: [approval]
|
|
49
|
+
gate:
|
|
50
|
+
file: gates/approval
|
|
51
|
+
type: approval
|
|
52
|
+
condition: Code review approved, architecture validated
|
|
53
|
+
tandem:
|
|
54
|
+
partner: architect
|
|
55
|
+
scope: file-watch
|
|
56
|
+
|
|
57
|
+
- name: finish
|
|
58
|
+
agent: sm
|
|
59
|
+
input: [approval]
|
|
60
|
+
output: [archived_session, story_summary]
|
|
61
|
+
|
|
62
|
+
triggers:
|
|
63
|
+
tags: [review-tandem, tandem]
|
|
64
|
+
points:
|
|
65
|
+
min: 8
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
# TDD Tandem Workflow - TDD with Full Tandem Chain
|
|
2
|
-
# Extends standard TDD with tandem observers on every phase:
|
|
3
|
-
# - Architect backseats TEA during red phase
|
|
4
|
-
# - TEA backseats Dev during green phase
|
|
5
|
-
# - PM backseats Reviewer during review phase
|
|
6
2
|
#
|
|
7
|
-
#
|
|
3
|
+
# When to use: Best for 5+ point feature stories where architectural alignment
|
|
4
|
+
# during implementation provides high value. Use this instead of base tdd when
|
|
5
|
+
# the story involves cross-cutting concerns, new patterns, or complex integrations.
|
|
6
|
+
#
|
|
7
|
+
# Tandem pairings:
|
|
8
|
+
# - RED phase: TEA + Architect (file-watch) — Architect reviews test strategy
|
|
9
|
+
# - GREEN phase: Dev + Architect (file-watch) — Architect guides implementation patterns
|
|
10
|
+
# - REVIEW phase: Reviewer + PM (file-watch) — PM validates business requirements
|
|
11
|
+
#
|
|
12
|
+
# Compared to base tdd: Adds tandem observers on every working phase.
|
|
13
|
+
# The extra context from partner agents helps catch architectural drift early.
|
|
14
|
+
#
|
|
15
|
+
# Flow: SM → TEA (+Architect) → Dev (+Architect) → Reviewer (+PM) → SM
|
|
8
16
|
|
|
9
17
|
workflow:
|
|
10
18
|
name: tdd-tandem
|
|
11
|
-
description: TDD with full tandem chain across
|
|
19
|
+
description: TDD with full tandem chain — architect and PM consultation across phases
|
|
12
20
|
version: "2.0.0"
|
|
13
21
|
|
|
14
22
|
phases:
|
|
@@ -37,7 +45,7 @@ workflow:
|
|
|
37
45
|
type: tests_pass
|
|
38
46
|
condition: All tests passing, no skipped tests
|
|
39
47
|
tandem:
|
|
40
|
-
partner:
|
|
48
|
+
partner: architect
|
|
41
49
|
scope: file-watch
|
|
42
50
|
|
|
43
51
|
- name: review
|
|
@@ -60,5 +68,5 @@ workflow:
|
|
|
60
68
|
triggers:
|
|
61
69
|
tags: [tandem]
|
|
62
70
|
points:
|
|
63
|
-
min:
|
|
71
|
+
min: 5
|
|
64
72
|
default: false
|
|
@@ -12,8 +12,9 @@ Python Click CLI for Pennyfarthing. Entry point: `pennyfarthing_scripts/cli.py`.
|
|
|
12
12
|
| `pf bc` | Panel focus and layout management | `bc/cli.py` |
|
|
13
13
|
| `pf validate` | Project validators | `validate/cli.py` |
|
|
14
14
|
| `pf agent` | Agent session management | `cli.py` (inline) |
|
|
15
|
-
| `pf workflow` | Workflow state and phase management | `cli.py`
|
|
15
|
+
| `pf workflow` | Workflow state and phase management | `workflow/cli.py` |
|
|
16
16
|
| `pf bikerack` | BikeRack dashboard launcher | `bikerack/cli.py` |
|
|
17
|
+
| `pf git` | Repository operations (status, branches, worktree, hooks) | `git_group/cli.py` |
|
|
17
18
|
| `pf debug` | Analysis tools (hotspots, deadcode, healthscore) | `cli.py` (inline group) |
|
|
18
19
|
|
|
19
20
|
### Sugar Shortcuts
|
|
@@ -139,9 +140,17 @@ Options: `--session-id`, `--no-persona`, `--json`, `--minimal`, `--full`, `--qui
|
|
|
139
140
|
|
|
140
141
|
| Command | Description | Source |
|
|
141
142
|
|---------|-------------|--------|
|
|
142
|
-
| `pf workflow check` | Current workflow state | `workflow.py` |
|
|
143
|
-
| `pf workflow phase-check WORKFLOW PHASE` | Check phase owner | `workflow.py` |
|
|
144
|
-
| `pf workflow handoff AGENT` | Emit handoff marker | `cli.py`
|
|
143
|
+
| `pf workflow check [--json]` | Current workflow state | `workflow/cli.py` |
|
|
144
|
+
| `pf workflow phase-check WORKFLOW PHASE` | Check phase owner | `workflow/cli.py` |
|
|
145
|
+
| `pf workflow handoff AGENT` | Emit handoff marker | `workflow/cli.py` |
|
|
146
|
+
| `pf workflow type WORKFLOW` | Get workflow type (phased/stepped/procedural) | `workflow/cli.py` |
|
|
147
|
+
| `pf workflow list` | List all available workflows | `workflow/cli.py` |
|
|
148
|
+
| `pf workflow show [NAME]` | Show workflow details | `workflow/cli.py` |
|
|
149
|
+
| `pf workflow start NAME [--mode M]` | Start stepped workflow | `workflow/cli.py` |
|
|
150
|
+
| `pf workflow resume [NAME]` | Resume interrupted workflow | `workflow/cli.py` |
|
|
151
|
+
| `pf workflow status [NAME]` | Show stepped workflow progress | `workflow/cli.py` |
|
|
152
|
+
| `pf workflow fix-phase ID PHASE [--dry-run]` | Repair session phase | `workflow/cli.py` |
|
|
153
|
+
| `pf workflow complete-step [NAME] [--step N]` | Complete current step | `workflow/cli.py` |
|
|
145
154
|
|
|
146
155
|
## pf bikerack
|
|
147
156
|
|
|
@@ -151,6 +160,19 @@ Options: `--session-id`, `--no-persona`, `--json`, `--minimal`, `--full`, `--qui
|
|
|
151
160
|
| `pf bikerack stop` | Stop running instance | `bikerack/cli.py` |
|
|
152
161
|
| `pf bikerack status` | Show running state | `bikerack/cli.py` |
|
|
153
162
|
|
|
163
|
+
## pf git
|
|
164
|
+
|
|
165
|
+
| Command | Description | Source |
|
|
166
|
+
|---------|-------------|--------|
|
|
167
|
+
| `pf git status [--brief]` | Check git status of all repos | `git/status_all.py` |
|
|
168
|
+
| `pf git branches BRANCH [--repos all\|api\|ui]` | Create feature branches | `git/create_branches.py` |
|
|
169
|
+
| `pf git cleanup` | Start git-cleanup workflow | `git_group/cli.py` |
|
|
170
|
+
| `pf git worktree create NAME BRANCH` | Create worktree(s) | `git/worktree.py` |
|
|
171
|
+
| `pf git worktree remove NAME` | Remove worktree | `git/worktree.py` |
|
|
172
|
+
| `pf git worktree list` | List active worktrees | `git/worktree.py` |
|
|
173
|
+
| `pf git worktree status` | Show worktree status | `git/worktree.py` |
|
|
174
|
+
| `pf git install-hooks` | Install git hooks with .d/ dispatcher | `git/hooks_installer.py` |
|
|
175
|
+
|
|
154
176
|
## pf debug
|
|
155
177
|
|
|
156
178
|
| Command | Description | Source |
|
|
Binary file
|