@pennyfarthing/core 9.0.0 → 9.1.2
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 +16 -7
- package/package.json +1 -1
- package/packages/core/dist/cli/commands/doctor.d.ts +5 -2
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +327 -17
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/init.js +3 -246
- 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 +4 -140
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- 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/settings.d.ts +22 -0
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/settings.js +300 -0
- package/packages/core/dist/cli/utils/settings.js.map +1 -0
- package/pennyfarthing-dist/commands/chore.md +18 -17
- package/pennyfarthing-dist/commands/continue-session.md +41 -7
- package/pennyfarthing-dist/commands/fix-blocker.md +22 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +25 -19
- package/pennyfarthing-dist/commands/patch.md +210 -0
- package/pennyfarthing-dist/commands/setup.md +65 -0
- package/pennyfarthing-dist/guides/session-schema.md +346 -0
- package/pennyfarthing-dist/guides/skill-schema.md +412 -0
- package/pennyfarthing-dist/guides/workflow-step-schema.md +512 -0
- package/pennyfarthing-dist/guides/xml-tags.md +292 -0
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +43 -8
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +30 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +78 -0
- package/pennyfarthing-dist/scripts/lib/find-root.sh +32 -7
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +13 -2
- package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +139 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +4 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +18 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +5 -1
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +3 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +2 -2
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +24 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +3 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +8 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +11 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +16 -0
- package/pennyfarthing-dist/skills/otel/skill.md +4 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +3 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +9 -0
- package/pennyfarthing-dist/skills/story/skill.md +16 -16
- package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +56 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +22 -0
- package/pennyfarthing-dist/skills/theme/skill.md +12 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +4 -0
- package/pennyfarthing-dist/skills/workflow/skill.md +22 -14
- package/pennyfarthing-dist/skills/yq/SKILL.md +8 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +12 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +12 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +25 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +23 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +26 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +24 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +23 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +43 -41
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-02-categorize.md +50 -19
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +102 -111
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +48 -39
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +30 -31
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +21 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +21 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +23 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +23 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +28 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +25 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-01-connect.md +257 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-02-explore.md +107 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-03-fix.md +127 -0
- package/pennyfarthing-dist/workflows/interactive-debug/steps/step-04-commit.md +122 -0
- package/pennyfarthing-dist/workflows/interactive-debug/workflow.yaml +51 -0
- package/pennyfarthing-dist/workflows/patch.yaml +2 -3
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +6 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +6 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +18 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +19 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +22 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +22 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +23 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +24 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +22 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +22 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +31 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +28 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +157 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-02-clone-repos.md +217 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-03-repos-yaml.md +159 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-04-claude-md.md +186 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-05-shared-context.md +185 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-06-task-runner.md +279 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-07-theme.md +200 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-08-cyclist.md +245 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-09-complete.md +203 -0
- package/pennyfarthing-dist/workflows/project-setup/workflow.yaml +41 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +21 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +23 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +25 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +22 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +23 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +23 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +12 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +12 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +12 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +12 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +22 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +24 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +25 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +34 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +23 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +25 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +27 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +27 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +35 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +22 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +25 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +26 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +29 -1
- package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +37 -1
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +15 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +17 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +16 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +17 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +22 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +6 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +6 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__init__.py +39 -0
- package/pennyfarthing_scripts/migration/__main__.py +10 -0
- package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/cli.py +304 -0
- package/pennyfarthing_scripts/migration/session.py +384 -0
- package/pennyfarthing_scripts/migration/skill.py +188 -0
- package/pennyfarthing_scripts/migration/step.py +229 -0
- package/pennyfarthing_scripts/migration/validate.py +282 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/schema_validation_hook.py +306 -0
- package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/status.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/archive_epic.py +399 -0
- package/pennyfarthing_scripts/sprint/cli.py +100 -0
- package/pennyfarthing_scripts/sprint/import_epic.py +431 -0
- package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.sh +0 -10
- package/pennyfarthing-dist/scripts/sprint/import_epic_to_future.py +0 -270
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 3: Core Experience Definition
|
|
2
2
|
|
|
3
|
+
<purpose>Define the core user experience, platform requirements, and what makes interactions effortless through collaborative discovery of the primary user action and critical success moments.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Identify the ONE core user action. Explore platform requirements (web, mobile, desktop). Identify effortless interactions and critical success moments. Synthesize experience principles. Generate core experience content with defining experience, platform strategy, effortless interactions, critical success moments, and experience principles sections. Present A/P/C menu. Save when user selects C.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Core user experience content appended to specification including platform strategy and guiding experience principles, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 4: Desired Emotional Response
|
|
2
2
|
|
|
3
|
+
<purpose>Define desired emotional responses users should feel when using the product through collaborative exploration of emotional goals and emotional journey mapping.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Explore core emotional goals. Identify emotional journey mapping across user lifecycle stages. Define micro-emotions (confidence vs confusion, trust vs skepticism). Connect emotions to UX design decisions. Validate emotional goals alignment with product vision. Generate emotional response content with primary goals, journey mapping, micro-emotions, design implications, and emotional design principles sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Emotional response content appended to specification including emotional design principles and UX implications, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 5: UX Pattern Analysis & Inspiration
|
|
2
2
|
|
|
3
|
+
<purpose>Analyze inspiring products and UX patterns to inform design decisions for the current project through collaborative identification of successful patterns and extraction of transferable lessons.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Identify 2-3 favorite apps users already use. Analyze UX patterns and principles for each. Extract transferable patterns for navigation, interaction, and visual design. Identify anti-patterns to avoid. Define design inspiration strategy (adopt, adapt, avoid). Generate inspiration analysis content with product analysis, transferable patterns, anti-patterns, and strategy sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Inspiration analysis content appended to specification including design inspiration strategy with patterns to adopt, adapt, and avoid, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 6: Design System Choice
|
|
2
2
|
|
|
3
|
+
<purpose>Choose appropriate design system approach (custom, established, or themeable) based on project requirements, constraints, and team considerations through collaborative decision-making.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Present design system options (custom, established, themeable). Analyze project requirements (platform, timeline, team size, brand, technical constraints). Explore specific design system options recommended for the platform. Facilitate decision process through framework questions. Finalize choice with clear rationale. Generate design system content with choice, rationale, implementation approach, and customization strategy sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Design system choice content appended to specification including rationale and implementation approach, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 7: Defining Core Experience
|
|
2
2
|
|
|
3
|
+
<purpose>Define the core interaction that, if nailed perfectly, makes everything else follow through collaborative exploration of user mental models, success criteria, and interaction mechanics.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Identify the defining experience (core action users describe to friends). Explore user mental model and current solutions. Define success criteria (when users say it just works). Identify novel vs established patterns. Design experience mechanics (initiation, interaction, feedback, completion). Generate defining experience content with experience description, mental model analysis, success criteria, novel patterns evaluation, and mechanics sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Defining experience content appended to specification including detailed experience mechanics and success criteria, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 8: Visual Foundation
|
|
2
2
|
|
|
3
|
+
<purpose>Establish visual design foundation including color themes, typography systems, and spacing/layout foundations through collaborative exploration of brand guidelines and design principles.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Assess brand guidelines. If no brand exists, generate color theme options and HTML visualizer. Define typography system (tone, readability, hierarchy). Establish spacing and layout foundation (density, grid system). Create visual foundation strategy with color system, typography, spacing, and accessibility sections. Generate visual foundation content. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Visual design foundation content appended to specification including color system, typography system, spacing/layout foundation, and accessibility considerations, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 9: Design Direction Mockups
|
|
2
2
|
|
|
3
|
+
<purpose>Generate comprehensive design direction mockups showing different visual approaches for the product through collaborative exploration and selection of visual directions.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Generate 6-8 design direction variations exploring layout, interactions, colors, density, and navigation. Create HTML design direction showcase at {planning_artifacts}/ux-design-directions.html with interactive elements. Present design exploration framework with evaluation criteria. Facilitate selection (pick favorite, combine elements, request modifications). Document design direction decision with rationale. Generate design direction content with directions explored, chosen direction, design rationale, and implementation approach sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Design direction content appended to specification including chosen visual direction with clear rationale and implementation approach. HTML mockup showcase created with interactive design direction visualizer, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 10: User Journey Flows
|
|
2
2
|
|
|
3
|
+
<purpose>Design detailed user journey flows for critical user interactions through collaborative definition of flows with Mermaid diagrams and optimization for efficiency and delight.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Load PRD user journeys as foundation. For each critical journey, design detailed flow (entry points, information needs, decisions, feedback, success definition). Create flow diagrams using Mermaid showing entry points, decision branches, success/failure paths, and error recovery. Optimize flows for efficiency and delight. Document journey patterns extracted across flows. Generate user journey content with journey descriptions, flow diagrams, journey patterns, and flow optimization principles sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>User journey flows content appended to specification including detailed Mermaid flow diagrams for all critical journeys, journey patterns, and optimization principles, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 11: Component Strategy
|
|
2
2
|
|
|
3
|
+
<purpose>Define component library strategy and design custom components not covered by the chosen design system through collaborative analysis of component needs and implementation planning.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Analyze design system coverage (available vs needed). Design each custom component with purpose, content, actions, states, variants, and accessibility. Document component specifications. Define overall component strategy (foundation components, custom components, implementation approach). Plan implementation roadmap (phase 1 core, phase 2 supporting, phase 3 enhancement). Generate component strategy content with design system analysis, custom component specifications, implementation strategy, and roadmap sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Component strategy content appended to specification including custom component specifications with accessibility considerations, implementation roadmap prioritized by criticality, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 12: UX Consistency Patterns
|
|
2
2
|
|
|
3
|
+
<purpose>Establish UX consistency patterns for common situations like buttons, forms, navigation, and feedback through collaborative definition of pattern categories and design guidelines.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Identify critical pattern categories (button hierarchy, feedback, forms, navigation, modals, empty states, search). Define patterns for critical categories with considerations (hierarchy, feedback, error recovery, accessibility, mobile). Establish pattern guidelines with when to use, visual design, behavior, accessibility, mobile considerations, and variants. Ensure design system integration. Generate pattern documentation with clear usage guidelines and visual examples. Generate UX patterns content with button hierarchy, feedback patterns, form patterns, navigation patterns, and additional patterns sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>UX consistency patterns content appended to specification including pattern guidelines for all critical categories with accessibility and mobile considerations, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 13: Responsive Design & Accessibility
|
|
2
2
|
|
|
3
|
+
<purpose>Define responsive design strategy and accessibility requirements ensuring the product works beautifully across all devices and is accessible to all users.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Define responsive strategy for desktop (layout, features), tablet (gestures, density), and mobile (navigation, collapse, priority). Establish breakpoint strategy (standard vs custom, mobile-first vs desktop-first). Design accessibility strategy (WCAG level A/AA/AAA, color contrast, keyboard navigation, screen reader, touch targets). Define testing strategy (responsive testing, accessibility testing, user testing). Document implementation guidelines (responsive development, accessibility development). Generate responsive and accessibility content with strategy, breakpoint strategy, accessibility strategy, testing strategy, and implementation guidelines sections. Present A/P/C menu. Save when C selected.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Responsive and accessibility content appended to specification including comprehensive testing strategy and implementation guidelines for responsive design and accessibility compliance, with user confirmation and frontmatter updated.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- 🛑 NEVER generate content without user input
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Step 14: Workflow Completion
|
|
2
2
|
|
|
3
|
+
<purpose>Complete the UX design workflow, validate the specification, update status tracking, and provide next step guidance to the user.</purpose>
|
|
4
|
+
|
|
5
|
+
<instructions>Announce workflow completion with all accomplished sections. Update workflow status file with completion information and timestamp. Perform document quality check (completeness, consistency). Suggest next steps (wireframes, prototypes, architecture, Figma design). Provide final completion confirmation with core deliverables list. Set lastStep = 14 in frontmatter. Do NOT load additional steps.</instructions>
|
|
6
|
+
|
|
7
|
+
<output>Workflow completion announced with comprehensive summary of accomplished sections. Workflow status file updated. Next step options provided to user. UX design specification validated and ready for implementation. Specification location: {planning_artifacts}/ux-design-specification.md with supporting visual assets at {planning_artifacts}/ux-color-themes.html and {planning_artifacts}/ux-design-directions.html.</output>
|
|
8
|
+
|
|
3
9
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
4
10
|
|
|
5
11
|
- ✅ THIS IS A FINAL STEP - Workflow completion required
|
|
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
|
|
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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
XML Schema Migration Tools for Pennyfarthing.
|
|
3
|
+
|
|
4
|
+
This module provides tools to migrate and validate Pennyfarthing files
|
|
5
|
+
to conform to the XML schema definitions:
|
|
6
|
+
- Session files -> guides/session-schema.md
|
|
7
|
+
- Skill files -> guides/skill-schema.md
|
|
8
|
+
- Workflow step files -> guides/workflow-step-schema.md
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
python -m pennyfarthing_scripts.migration [command] [options]
|
|
12
|
+
|
|
13
|
+
Commands:
|
|
14
|
+
session Migrate session files to XML format
|
|
15
|
+
skill Audit/migrate skill files
|
|
16
|
+
step Audit/migrate workflow step files
|
|
17
|
+
validate Validate files against schemas
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from pennyfarthing_scripts.migration.session import (
|
|
21
|
+
SessionFile,
|
|
22
|
+
convert_session_file,
|
|
23
|
+
parse_markdown_session,
|
|
24
|
+
)
|
|
25
|
+
from pennyfarthing_scripts.migration.skill import audit_skill_file, audit_skills
|
|
26
|
+
from pennyfarthing_scripts.migration.step import audit_step_file, audit_workflow_steps
|
|
27
|
+
from pennyfarthing_scripts.migration.validate import validate_all, validate_file
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"SessionFile",
|
|
31
|
+
"convert_session_file",
|
|
32
|
+
"parse_markdown_session",
|
|
33
|
+
"audit_skill_file",
|
|
34
|
+
"audit_skills",
|
|
35
|
+
"audit_step_file",
|
|
36
|
+
"audit_workflow_steps",
|
|
37
|
+
"validate_file",
|
|
38
|
+
"validate_all",
|
|
39
|
+
]
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Migration CLI - Click-based CLI for XML schema migration tools.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
pf migration [COMMAND] [ARGS]...
|
|
6
|
+
python -m pennyfarthing_scripts.migration [COMMAND] [ARGS]...
|
|
7
|
+
|
|
8
|
+
Commands:
|
|
9
|
+
session Migrate session files to XML format
|
|
10
|
+
skill Audit skill files for required tags
|
|
11
|
+
step Audit workflow step files
|
|
12
|
+
validate Validate files against XML schemas
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
import click
|
|
20
|
+
|
|
21
|
+
from pennyfarthing_scripts.common.output import error, info, success, warn
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _find_project_root() -> Path:
|
|
25
|
+
"""Find project root by looking for .pennyfarthing directory."""
|
|
26
|
+
cwd = Path.cwd()
|
|
27
|
+
|
|
28
|
+
# Walk up looking for .pennyfarthing
|
|
29
|
+
for parent in [cwd, *cwd.parents]:
|
|
30
|
+
if (parent / ".pennyfarthing").exists():
|
|
31
|
+
return parent
|
|
32
|
+
|
|
33
|
+
# Fall back to cwd
|
|
34
|
+
return cwd
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@click.group()
|
|
38
|
+
def migration():
|
|
39
|
+
"""XML schema migration tools.
|
|
40
|
+
|
|
41
|
+
\b
|
|
42
|
+
Commands:
|
|
43
|
+
session - Migrate session files to XML format
|
|
44
|
+
skill - Audit skill files for required tags
|
|
45
|
+
step - Audit workflow step files
|
|
46
|
+
validate - Validate files against schemas
|
|
47
|
+
"""
|
|
48
|
+
pass
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@migration.command()
|
|
52
|
+
@click.argument("file", required=False, type=click.Path(exists=True))
|
|
53
|
+
@click.option("--dry-run", is_flag=True, help="Show what would be done without writing")
|
|
54
|
+
@click.option("--all", "convert_all", is_flag=True, help="Convert all session files")
|
|
55
|
+
def session(file: str | None, dry_run: bool, convert_all: bool):
|
|
56
|
+
"""Migrate session files to XML format.
|
|
57
|
+
|
|
58
|
+
\b
|
|
59
|
+
Arguments:
|
|
60
|
+
FILE - Specific session file to convert (optional)
|
|
61
|
+
|
|
62
|
+
\b
|
|
63
|
+
Examples:
|
|
64
|
+
pf migration session --dry-run .session/archive/MSSCI-12142-session.md
|
|
65
|
+
pf migration session --all --dry-run
|
|
66
|
+
pf migration session --all
|
|
67
|
+
"""
|
|
68
|
+
from pennyfarthing_scripts.migration.session import (
|
|
69
|
+
convert_session_file,
|
|
70
|
+
find_session_files,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
root = _find_project_root()
|
|
74
|
+
|
|
75
|
+
if file:
|
|
76
|
+
file_path = Path(file)
|
|
77
|
+
result = convert_session_file(file_path, dry_run=dry_run)
|
|
78
|
+
|
|
79
|
+
if result.get("skipped"):
|
|
80
|
+
info(f"{file_path.name}: Already in XML format")
|
|
81
|
+
elif result.get("success"):
|
|
82
|
+
if dry_run:
|
|
83
|
+
click.echo(f"\n=== Would convert {file_path.name} to: ===\n")
|
|
84
|
+
click.echo(result.get("content"))
|
|
85
|
+
click.echo("\n=== End ===")
|
|
86
|
+
else:
|
|
87
|
+
success(f"Converted: {file_path.name}")
|
|
88
|
+
else:
|
|
89
|
+
error(result.get("message", "Conversion failed"))
|
|
90
|
+
raise click.Abort()
|
|
91
|
+
|
|
92
|
+
elif convert_all:
|
|
93
|
+
files = find_session_files(root)
|
|
94
|
+
if not files:
|
|
95
|
+
warn("No session files found")
|
|
96
|
+
return
|
|
97
|
+
|
|
98
|
+
info(f"Found {len(files)} session files")
|
|
99
|
+
converted = 0
|
|
100
|
+
skipped = 0
|
|
101
|
+
|
|
102
|
+
for file_path in files:
|
|
103
|
+
result = convert_session_file(file_path, dry_run=dry_run)
|
|
104
|
+
|
|
105
|
+
if result.get("skipped"):
|
|
106
|
+
skipped += 1
|
|
107
|
+
elif result.get("success"):
|
|
108
|
+
converted += 1
|
|
109
|
+
if dry_run:
|
|
110
|
+
info(f"Would convert: {file_path.name}")
|
|
111
|
+
else:
|
|
112
|
+
success(f"Converted: {file_path.name}")
|
|
113
|
+
else:
|
|
114
|
+
error(f"Failed: {file_path.name} - {result.get('message')}")
|
|
115
|
+
|
|
116
|
+
click.echo("")
|
|
117
|
+
info(f"Summary: {converted} converted, {skipped} already XML")
|
|
118
|
+
|
|
119
|
+
else:
|
|
120
|
+
# Show available files
|
|
121
|
+
files = find_session_files(root)
|
|
122
|
+
if not files:
|
|
123
|
+
warn("No session files found")
|
|
124
|
+
return
|
|
125
|
+
|
|
126
|
+
info(f"Session files found: {len(files)}")
|
|
127
|
+
for f in files[:10]:
|
|
128
|
+
click.echo(f" {f.relative_to(root)}")
|
|
129
|
+
if len(files) > 10:
|
|
130
|
+
click.echo(f" ... and {len(files) - 10} more")
|
|
131
|
+
click.echo("")
|
|
132
|
+
info("Use --all to convert all, or specify a file path")
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@migration.command()
|
|
136
|
+
@click.argument("skill_name", required=False)
|
|
137
|
+
@click.option("--report", is_flag=True, help="Generate detailed report")
|
|
138
|
+
def skill(skill_name: str | None, report: bool):
|
|
139
|
+
"""Audit skill files for required XML tags.
|
|
140
|
+
|
|
141
|
+
\b
|
|
142
|
+
Arguments:
|
|
143
|
+
SKILL_NAME - Specific skill to audit (optional)
|
|
144
|
+
|
|
145
|
+
\b
|
|
146
|
+
Examples:
|
|
147
|
+
pf migration skill --report
|
|
148
|
+
pf migration skill sprint
|
|
149
|
+
"""
|
|
150
|
+
from pennyfarthing_scripts.migration.skill import audit_skills
|
|
151
|
+
|
|
152
|
+
root = _find_project_root()
|
|
153
|
+
results = audit_skills(root, skill_name=skill_name)
|
|
154
|
+
|
|
155
|
+
if results["summary"].get("error"):
|
|
156
|
+
error(results["summary"]["error"])
|
|
157
|
+
raise click.Abort()
|
|
158
|
+
|
|
159
|
+
# Print results
|
|
160
|
+
for result in results["results"]:
|
|
161
|
+
if result.status == "OK":
|
|
162
|
+
success(f"{result.skill_name}: All tags present")
|
|
163
|
+
elif result.status == "PARTIAL":
|
|
164
|
+
warn(f"{result.skill_name}: Missing recommended: {', '.join(result.missing_recommended)}")
|
|
165
|
+
else:
|
|
166
|
+
error(f"{result.skill_name}: Missing required: {', '.join(result.missing_required)}")
|
|
167
|
+
|
|
168
|
+
if report and (result.missing_required or result.missing_recommended):
|
|
169
|
+
click.echo(f" Present: {', '.join(result.present_tags)}")
|
|
170
|
+
|
|
171
|
+
# Print summary
|
|
172
|
+
summary = results["summary"]
|
|
173
|
+
click.echo("")
|
|
174
|
+
info("=== Summary ===")
|
|
175
|
+
click.echo(f" Total: {summary['total']}")
|
|
176
|
+
click.echo(f" Valid: {summary['valid']}")
|
|
177
|
+
click.echo(f" Partial: {summary['partial']}")
|
|
178
|
+
click.echo(f" Needs work: {summary['needs_update']}")
|
|
179
|
+
|
|
180
|
+
if summary["needs_update"] > 0:
|
|
181
|
+
click.echo("")
|
|
182
|
+
info("Skills needing updates:")
|
|
183
|
+
for result in results["results"]:
|
|
184
|
+
if not result.is_valid:
|
|
185
|
+
click.echo(f" - {result.skill_name}")
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@migration.command()
|
|
189
|
+
@click.argument("workflow_name", required=False)
|
|
190
|
+
@click.option("--report", is_flag=True, help="Generate detailed report")
|
|
191
|
+
def step(workflow_name: str | None, report: bool):
|
|
192
|
+
"""Audit workflow step files for required XML tags.
|
|
193
|
+
|
|
194
|
+
\b
|
|
195
|
+
Arguments:
|
|
196
|
+
WORKFLOW_NAME - Specific workflow to audit (optional)
|
|
197
|
+
|
|
198
|
+
\b
|
|
199
|
+
Examples:
|
|
200
|
+
pf migration step --report
|
|
201
|
+
pf migration step architecture
|
|
202
|
+
"""
|
|
203
|
+
from pennyfarthing_scripts.migration.step import audit_workflow_steps
|
|
204
|
+
|
|
205
|
+
root = _find_project_root()
|
|
206
|
+
results = audit_workflow_steps(root, workflow_name=workflow_name)
|
|
207
|
+
|
|
208
|
+
# Print results by workflow
|
|
209
|
+
for workflow in results["workflows"]:
|
|
210
|
+
info(f"Workflow: {workflow.workflow_name} ({workflow.total_steps} steps)")
|
|
211
|
+
|
|
212
|
+
for result in workflow.step_results:
|
|
213
|
+
if result.status == "OK":
|
|
214
|
+
if report:
|
|
215
|
+
success(f" {result.step_name}: OK")
|
|
216
|
+
elif result.status == "PARTIAL":
|
|
217
|
+
warn(f" {result.step_name}: Missing recommended: {', '.join(result.missing_recommended)}")
|
|
218
|
+
else:
|
|
219
|
+
error(f" {result.step_name}: Missing required: {', '.join(result.missing_required)}")
|
|
220
|
+
|
|
221
|
+
# Print summary
|
|
222
|
+
summary = results["summary"]
|
|
223
|
+
click.echo("")
|
|
224
|
+
info("=== Summary ===")
|
|
225
|
+
click.echo(f" Workflows: {summary['total_workflows']}")
|
|
226
|
+
click.echo(f" Step files: {summary['total_files']}")
|
|
227
|
+
click.echo(f" Valid: {summary['valid']}")
|
|
228
|
+
click.echo(f" Needs work: {summary['needs_update']}")
|
|
229
|
+
|
|
230
|
+
if summary["needs_update"] > 0:
|
|
231
|
+
click.echo("")
|
|
232
|
+
info("Workflows with missing required tags:")
|
|
233
|
+
for workflow in results["workflows"]:
|
|
234
|
+
if workflow.needs_update > 0:
|
|
235
|
+
click.echo(f" - {workflow.workflow_name} ({workflow.needs_update} files)")
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
@migration.command()
|
|
239
|
+
@click.option(
|
|
240
|
+
"--type",
|
|
241
|
+
"file_type",
|
|
242
|
+
type=click.Choice(["session", "skill", "step", "all"]),
|
|
243
|
+
default="all",
|
|
244
|
+
help="Type of files to validate",
|
|
245
|
+
)
|
|
246
|
+
@click.option("--strict", is_flag=True, help="Treat warnings as errors")
|
|
247
|
+
def validate(file_type: str, strict: bool):
|
|
248
|
+
"""Validate files against XML schemas.
|
|
249
|
+
|
|
250
|
+
\b
|
|
251
|
+
Examples:
|
|
252
|
+
pf migration validate
|
|
253
|
+
pf migration validate --type skill
|
|
254
|
+
pf migration validate --strict
|
|
255
|
+
"""
|
|
256
|
+
from pennyfarthing_scripts.migration.validate import validate_all
|
|
257
|
+
|
|
258
|
+
root = _find_project_root()
|
|
259
|
+
summary = validate_all(root, file_type=file_type, strict=strict)
|
|
260
|
+
|
|
261
|
+
# Print results
|
|
262
|
+
for result in summary.results:
|
|
263
|
+
rel_path = result.file_path.relative_to(root) if root in result.file_path.parents else result.file_path
|
|
264
|
+
if result.status == "PASS":
|
|
265
|
+
success(f"{rel_path}")
|
|
266
|
+
elif result.status == "WARN":
|
|
267
|
+
warn(f"{rel_path}")
|
|
268
|
+
for w in result.warnings:
|
|
269
|
+
click.echo(f" - {w}")
|
|
270
|
+
else:
|
|
271
|
+
error(f"{rel_path}")
|
|
272
|
+
for e in result.errors:
|
|
273
|
+
click.echo(f" - {e}")
|
|
274
|
+
|
|
275
|
+
# Print summary
|
|
276
|
+
click.echo("")
|
|
277
|
+
info("=== Summary ===")
|
|
278
|
+
click.echo(f" Passed: {summary.passed}")
|
|
279
|
+
click.echo(f" Warnings: {summary.warnings}")
|
|
280
|
+
click.echo(f" Errors: {summary.errors}")
|
|
281
|
+
|
|
282
|
+
if not summary.success:
|
|
283
|
+
raise click.Abort()
|
|
284
|
+
|
|
285
|
+
if strict and summary.warnings > 0:
|
|
286
|
+
error("Warnings treated as errors in strict mode")
|
|
287
|
+
raise click.Abort()
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
# Alias for backwards compatibility
|
|
291
|
+
cli = migration
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def main(args: list[str] | None = None) -> int:
|
|
295
|
+
"""Entry point."""
|
|
296
|
+
try:
|
|
297
|
+
migration(args)
|
|
298
|
+
return 0
|
|
299
|
+
except SystemExit as e:
|
|
300
|
+
return e.code if isinstance(e.code, int) else 0
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
if __name__ == "__main__":
|
|
304
|
+
migration()
|