@pennyfarthing/core 10.0.0 → 10.0.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/LICENSE +14 -0
- package/package.json +22 -12
- package/pennyfarthing-dist/agents/README.md +348 -0
- package/pennyfarthing-dist/agents/architect.md +180 -0
- package/pennyfarthing-dist/agents/dev.md +169 -0
- package/pennyfarthing-dist/agents/devops.md +203 -0
- package/pennyfarthing-dist/agents/handoff.md +235 -0
- package/pennyfarthing-dist/agents/orchestrator.md +182 -0
- package/pennyfarthing-dist/agents/pm.md +152 -0
- package/pennyfarthing-dist/agents/reviewer-preflight.md +129 -0
- package/pennyfarthing-dist/agents/reviewer.md +197 -0
- package/pennyfarthing-dist/agents/sm-file-summary.md +79 -0
- package/pennyfarthing-dist/agents/sm-finish.md +82 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +129 -0
- package/pennyfarthing-dist/agents/sm-setup.md +251 -0
- package/pennyfarthing-dist/agents/sm.md +298 -0
- package/pennyfarthing-dist/agents/tea.md +161 -0
- package/pennyfarthing-dist/agents/tech-writer.md +226 -0
- package/pennyfarthing-dist/agents/testing-runner.md +184 -0
- package/pennyfarthing-dist/agents/ux-designer.md +236 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +96 -0
- package/pennyfarthing-dist/commands/architect.md +9 -0
- package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
- package/pennyfarthing-dist/commands/benchmark.md +485 -0
- package/pennyfarthing-dist/commands/brainstorming.md +91 -0
- package/pennyfarthing-dist/commands/check.md +156 -0
- package/pennyfarthing-dist/commands/chore.md +218 -0
- package/pennyfarthing-dist/commands/close-epic.md +139 -0
- package/pennyfarthing-dist/commands/continue-session.md +218 -0
- package/pennyfarthing-dist/commands/create-branches-from-story.md +358 -0
- package/pennyfarthing-dist/commands/create-theme.md +29 -0
- package/pennyfarthing-dist/commands/dev.md +9 -0
- package/pennyfarthing-dist/commands/devops.md +9 -0
- package/pennyfarthing-dist/commands/fix-blocker.md +22 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +57 -0
- package/pennyfarthing-dist/commands/health-check.md +143 -0
- package/pennyfarthing-dist/commands/help.md +264 -0
- package/pennyfarthing-dist/commands/job-fair.md +102 -0
- package/pennyfarthing-dist/commands/list-themes.md +21 -0
- package/pennyfarthing-dist/commands/new-work.md +23 -0
- package/pennyfarthing-dist/commands/orchestrator.md +9 -0
- package/pennyfarthing-dist/commands/parallel-work.md +73 -0
- package/pennyfarthing-dist/commands/party-mode.md +77 -0
- package/pennyfarthing-dist/commands/patch.md +210 -0
- package/pennyfarthing-dist/commands/permissions.md +193 -0
- package/pennyfarthing-dist/commands/pm.md +9 -0
- package/pennyfarthing-dist/commands/prime.md +136 -0
- package/pennyfarthing-dist/commands/release.md +74 -0
- package/pennyfarthing-dist/commands/repo-status.md +49 -0
- package/pennyfarthing-dist/commands/retro.md +200 -0
- package/pennyfarthing-dist/commands/reviewer.md +9 -0
- package/pennyfarthing-dist/commands/run-ci.md +116 -0
- package/pennyfarthing-dist/commands/set-theme.md +56 -0
- package/pennyfarthing-dist/commands/setup.md +65 -0
- package/pennyfarthing-dist/commands/show-theme.md +21 -0
- package/pennyfarthing-dist/commands/sm.md +9 -0
- package/pennyfarthing-dist/commands/solo.md +447 -0
- package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
- package/pennyfarthing-dist/commands/sprint.md +142 -0
- package/pennyfarthing-dist/commands/standalone.md +194 -0
- package/pennyfarthing-dist/commands/start-epic.md +168 -0
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +373 -0
- package/pennyfarthing-dist/commands/tea.md +9 -0
- package/pennyfarthing-dist/commands/tech-writer.md +9 -0
- package/pennyfarthing-dist/commands/theme-maker.md +676 -0
- package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
- package/pennyfarthing-dist/commands/ux-designer.md +9 -0
- package/pennyfarthing-dist/commands/work.md +25 -0
- package/pennyfarthing-dist/commands/workflow.md +21 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +92 -0
- package/pennyfarthing-dist/guides/agent-coordination.md +475 -0
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +432 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
- package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
- package/pennyfarthing-dist/guides/hooks.md +230 -0
- package/pennyfarthing-dist/guides/measurement-framework.md +210 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +766 -0
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
- package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
- package/pennyfarthing-dist/guides/persona-loading.md +46 -0
- package/pennyfarthing-dist/guides/prompt-patterns.md +338 -0
- package/pennyfarthing-dist/guides/scale-levels.md +114 -0
- package/pennyfarthing-dist/guides/session-artifacts.md +193 -0
- package/pennyfarthing-dist/guides/session-schema.md +346 -0
- package/pennyfarthing-dist/guides/skill-schema.md +412 -0
- package/pennyfarthing-dist/guides/workflow-schema.md +257 -0
- package/pennyfarthing-dist/guides/workflow-step-schema.md +512 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
- package/pennyfarthing-dist/guides/xml-tags.md +627 -0
- package/pennyfarthing-dist/output-styles/teaching.md +33 -0
- package/pennyfarthing-dist/output-styles/terse.md +20 -0
- package/pennyfarthing-dist/output-styles/verbose.md +28 -0
- package/pennyfarthing-dist/personas/themes/a-team.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +324 -0
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +282 -0
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +304 -0
- package/pennyfarthing-dist/personas/themes/control.yaml +201 -0
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +315 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +284 -0
- package/pennyfarthing-dist/personas/themes/dune.yaml +301 -0
- package/pennyfarthing-dist/personas/themes/firefly.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +284 -0
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +316 -0
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +323 -0
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +326 -0
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +349 -0
- package/pennyfarthing-dist/personas/themes/mash.yaml +329 -0
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +344 -0
- package/pennyfarthing-dist/personas/themes/sandman.yaml +282 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +358 -0
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +297 -0
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +337 -0
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +342 -0
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +285 -0
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +285 -0
- package/pennyfarthing-dist/personas/themes/x-files.yaml +296 -0
- package/pennyfarthing-dist/scripts/README.md +87 -0
- package/pennyfarthing-dist/scripts/core/README.md +25 -0
- package/pennyfarthing-dist/scripts/core/agent-session.sh +390 -0
- package/pennyfarthing-dist/scripts/core/check-context.sh +194 -0
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +112 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +90 -0
- package/pennyfarthing-dist/scripts/core/prime.sh +30 -0
- package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
- package/pennyfarthing-dist/scripts/git/README.md +25 -0
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +267 -0
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +152 -0
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +79 -0
- package/pennyfarthing-dist/scripts/git/release.sh +246 -0
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +497 -0
- package/pennyfarthing-dist/scripts/health/drift-detection.sh +156 -0
- package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +106 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +95 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +65 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +150 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +190 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +42 -0
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +20 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +499 -0
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +30 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +97 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +65 -0
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +78 -0
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +94 -0
- package/pennyfarthing-dist/scripts/jira/README.md +36 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +95 -0
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +91 -0
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +22 -0
- package/pennyfarthing-dist/scripts/jira/jira-lib.sh +464 -0
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +260 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +18 -0
- package/pennyfarthing-dist/scripts/jira/jira-sync.sh +16 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/jira/sync-epic-to-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/lib/README.md +29 -0
- package/pennyfarthing-dist/scripts/lib/background-tasks.sh +177 -0
- package/pennyfarthing-dist/scripts/lib/checkpoint.sh +136 -0
- package/pennyfarthing-dist/scripts/lib/common.sh +212 -0
- package/pennyfarthing-dist/scripts/lib/file-lock.sh +269 -0
- package/pennyfarthing-dist/scripts/lib/find-root.sh +58 -0
- package/pennyfarthing-dist/scripts/lib/logging.sh +186 -0
- package/pennyfarthing-dist/scripts/lib/retry.sh +76 -0
- package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +102 -0
- package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +91 -0
- package/pennyfarthing-dist/scripts/misc/README.md +44 -0
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +13 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +226 -0
- package/pennyfarthing-dist/scripts/misc/backlog.sh +77 -0
- package/pennyfarthing-dist/scripts/misc/check-status.sh +247 -0
- package/pennyfarthing-dist/scripts/misc/find-related-work.sh +231 -0
- package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +107 -0
- package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +74 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +10 -0
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +319 -0
- package/pennyfarthing-dist/scripts/misc/repo-scan.sh +141 -0
- package/pennyfarthing-dist/scripts/misc/repo-utils.sh +778 -0
- package/pennyfarthing-dist/scripts/misc/run-ci.sh +212 -0
- package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +7 -0
- package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +319 -0
- package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +193 -0
- package/pennyfarthing-dist/scripts/misc/statusline.sh +257 -0
- package/pennyfarthing-dist/scripts/misc/uninstall.sh +275 -0
- package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +160 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +417 -0
- package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +54 -0
- package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
- package/pennyfarthing-dist/scripts/sprint/archive-story.sh +133 -0
- package/pennyfarthing-dist/scripts/sprint/available-stories.sh +91 -0
- package/pennyfarthing-dist/scripts/sprint/check-story.sh +158 -0
- package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +52 -0
- package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +63 -0
- package/pennyfarthing-dist/scripts/sprint/list-future.sh +145 -0
- package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +110 -0
- package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +148 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +415 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +33 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +230 -0
- package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
- package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +139 -0
- package/pennyfarthing-dist/scripts/story/README.md +23 -0
- package/pennyfarthing-dist/scripts/story/create-story.sh +19 -0
- package/pennyfarthing-dist/scripts/story/size-story.sh +18 -0
- package/pennyfarthing-dist/scripts/story/story-template.sh +18 -0
- package/pennyfarthing-dist/scripts/test/README.md +23 -0
- package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +59 -0
- package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +220 -0
- package/pennyfarthing-dist/scripts/test/swebench-judge.py +374 -0
- package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
- package/pennyfarthing-dist/scripts/test/test-setup.sh +337 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
- package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
- package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
- package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
- package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
- package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
- package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
- package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +106 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
- package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
- package/pennyfarthing-dist/scripts/theme/README.md +22 -0
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +13 -0
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +402 -0
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +30 -0
- package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
- package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +576 -0
- package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
- package/pennyfarthing-dist/scripts/workflow/check.py +502 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +24 -0
- package/pennyfarthing-dist/scripts/workflow/complete-step.py +304 -0
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +154 -0
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +222 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +61 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +13 -0
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +124 -0
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +34 -0
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +157 -0
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +132 -0
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +250 -0
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +161 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +246 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +385 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +172 -0
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +277 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +88 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +461 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +261 -0
- package/pennyfarthing-dist/skills/jira/SKILL.md +508 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +644 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +414 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +256 -0
- package/pennyfarthing-dist/skills/otel/skill.md +227 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +157 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +187 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +107 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +393 -0
- package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
- package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
- package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
- package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
- package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
- package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +93 -0
- package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
- package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
- package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
- package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
- package/pennyfarthing-dist/skills/story/skill.md +219 -0
- package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +446 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +121 -0
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
- package/pennyfarthing-dist/skills/theme/skill.md +141 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +178 -0
- package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
- package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
- package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
- package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
- package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
- package/pennyfarthing-dist/skills/workflow/skill.md +345 -0
- package/pennyfarthing-dist/skills/yq/SKILL.md +272 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
- package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
- package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +130 -0
- package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
- package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +113 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +105 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +127 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +145 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +150 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +145 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +154 -0
- package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +172 -0
- package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
- package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +60 -0
- package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
- package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
- package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
- package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
- package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
- package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
- package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
- package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
- package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
- package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +281 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +256 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +298 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +177 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +145 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +28 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +103 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-02-categorize.md +147 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +215 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +97 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +78 -0
- package/pennyfarthing-dist/workflows/git-cleanup.yaml +59 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +211 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +199 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +202 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +162 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +280 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +158 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
- package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -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 +67 -0
- package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
- package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
- package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +197 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +159 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +230 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +232 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +219 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +213 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +232 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +243 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +234 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +237 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +248 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +223 -0
- package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +186 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +253 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +214 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +255 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +259 -0
- package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +174 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +224 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +197 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +215 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +180 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +220 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +234 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +223 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +211 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +249 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +269 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +215 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +270 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +248 -0
- package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +238 -0
- package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
- package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +195 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +180 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +221 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +224 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +228 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +243 -0
- package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +216 -0
- package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
- package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
- package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +206 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +349 -0
- package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +306 -0
- package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -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-theme-packs.md +142 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-09-cyclist.md +245 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-10-complete.md +204 -0
- package/pennyfarthing-dist/workflows/project-setup/workflow.yaml +41 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +177 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +143 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +138 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +135 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +129 -0
- package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +163 -0
- package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +201 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +156 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +140 -0
- package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +203 -0
- package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
- package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
- package/pennyfarthing-dist/workflows/release/steps/step-01-preflight.md +105 -0
- package/pennyfarthing-dist/workflows/release/steps/step-02-bump.md +95 -0
- package/pennyfarthing-dist/workflows/release/steps/step-03-changelog.md +125 -0
- package/pennyfarthing-dist/workflows/release/steps/step-04-readme.md +101 -0
- package/pennyfarthing-dist/workflows/release/steps/step-05-claude-md.md +102 -0
- package/pennyfarthing-dist/workflows/release/steps/step-06-retro.md +59 -0
- package/pennyfarthing-dist/workflows/release/steps/step-07-commit.md +109 -0
- package/pennyfarthing-dist/workflows/release/steps/step-08-merge.md +65 -0
- package/pennyfarthing-dist/workflows/release/steps/step-09-push.md +75 -0
- package/pennyfarthing-dist/workflows/release/steps/step-10-publish.md +93 -0
- package/pennyfarthing-dist/workflows/release/steps/step-11-finalize.md +71 -0
- package/pennyfarthing-dist/workflows/release.yaml +62 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +159 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +253 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +263 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +232 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +260 -0
- package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +477 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +205 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +262 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +227 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +275 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +286 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +203 -0
- package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +510 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +159 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +264 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +274 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +228 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +267 -0
- package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +522 -0
- package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
- package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
- package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
- package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
- package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
- package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
- package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +69 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +61 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +80 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +90 -0
- package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +78 -0
- package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +141 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +133 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +196 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +222 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +225 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +240 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +258 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +260 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +230 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +230 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +247 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +254 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +243 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +270 -0
- package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +234 -0
- package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
- package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: changelog
|
|
3
|
+
description: Maintain changelogs following Keep a Changelog format. Use when creating release notes, parsing conventional commits for changelog entries, auto-generating changelog sections from git history, or preparing CHANGELOG.md for releases.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<run>
|
|
7
|
+
Commands for changelog maintenance:
|
|
8
|
+
- Parse conventional commits for changelog entries
|
|
9
|
+
- Auto-generate changelog sections from git history
|
|
10
|
+
- Version bump decisions using semantic versioning
|
|
11
|
+
- Create release notes and CHANGELOG.md updates
|
|
12
|
+
</run>
|
|
13
|
+
|
|
14
|
+
<output>
|
|
15
|
+
Changelog entries in Keep a Changelog format:
|
|
16
|
+
- Added (new features from `feat:` commits)
|
|
17
|
+
- Changed (changes from `perf:` commits, breaking changes)
|
|
18
|
+
- Deprecated (features marked for removal)
|
|
19
|
+
- Removed (removed features)
|
|
20
|
+
- Fixed (bug fixes from `fix:` commits)
|
|
21
|
+
- Security (vulnerability fixes)
|
|
22
|
+
</output>
|
|
23
|
+
|
|
24
|
+
# Changelog Management Skill
|
|
25
|
+
|
|
26
|
+
## When to Use This Skill
|
|
27
|
+
|
|
28
|
+
- Creating release notes
|
|
29
|
+
- Parsing conventional commits for changelog entries
|
|
30
|
+
- Auto-generating changelog sections from git history
|
|
31
|
+
- Managing semantic versioning changes
|
|
32
|
+
- Preparing CHANGELOG.md for releases
|
|
33
|
+
- Documenting breaking changes, features, and fixes
|
|
34
|
+
|
|
35
|
+
## Overview
|
|
36
|
+
|
|
37
|
+
This skill guides changelog management using the [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format combined with [Conventional Commits](https://www.conventionalcommits.org/). This approach ensures consistency, enables automation, and provides clear communication about changes.
|
|
38
|
+
|
|
39
|
+
**Project Reference:** Pennyfarthing uses Keep a Changelog format in `/CHANGELOG.md` with semantic versioning.
|
|
40
|
+
|
|
41
|
+
## Keep a Changelog Format Reference
|
|
42
|
+
|
|
43
|
+
The standard structure is:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
# Changelog
|
|
47
|
+
|
|
48
|
+
All notable changes to [Project] are documented in this file.
|
|
49
|
+
|
|
50
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
51
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
52
|
+
|
|
53
|
+
## [Unreleased]
|
|
54
|
+
|
|
55
|
+
*No unreleased changes*
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## [1.0.0] - 2024-01-15
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- New user-facing features
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
- Changes in existing functionality
|
|
66
|
+
|
|
67
|
+
### Deprecated
|
|
68
|
+
- Features marked for removal
|
|
69
|
+
|
|
70
|
+
### Removed
|
|
71
|
+
- Removed features
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
- Bug fixes
|
|
75
|
+
|
|
76
|
+
### Security
|
|
77
|
+
- Security vulnerability fixes
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## [0.9.0] - 2024-01-10
|
|
82
|
+
...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Guidelines
|
|
86
|
+
|
|
87
|
+
1. **One version per section** - Each release gets its own `## [version] - date` heading
|
|
88
|
+
2. **Semantic versioning** - Follow MAJOR.MINOR.PATCH (e.g., 1.5.3)
|
|
89
|
+
3. **ISO 8601 dates** - Format as YYYY-MM-DD
|
|
90
|
+
4. **Categorized entries** - Group changes by type (Added, Changed, Fixed, etc.)
|
|
91
|
+
5. **Unreleased section** - Always maintain an `[Unreleased]` section at the top for staging changes
|
|
92
|
+
6. **End-user focus** - Write for developers using your project, not your own team
|
|
93
|
+
|
|
94
|
+
### Section Hierarchy
|
|
95
|
+
|
|
96
|
+
- **Added** - New features
|
|
97
|
+
- **Changed** - Changes to existing functionality
|
|
98
|
+
- **Deprecated** - Features soon to be removed (provide migration path)
|
|
99
|
+
- **Removed** - Removed features (finalize deprecations)
|
|
100
|
+
- **Fixed** - Bug fixes
|
|
101
|
+
- **Security** - Vulnerability fixes with patches
|
|
102
|
+
|
|
103
|
+
## Conventional Commits Parsing
|
|
104
|
+
|
|
105
|
+
[Conventional Commits](https://www.conventionalcommits.org/) structure commits to enable automatic changelog generation:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
<type>[optional scope]: <description>
|
|
109
|
+
|
|
110
|
+
[optional body]
|
|
111
|
+
|
|
112
|
+
[optional footer(s)]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Types and Changelog Mapping
|
|
116
|
+
|
|
117
|
+
| Commit Type | Changelog Section | Example |
|
|
118
|
+
|-------------|-------------------|---------|
|
|
119
|
+
| `feat:` | Added | `feat: add user authentication` |
|
|
120
|
+
| `fix:` | Fixed | `fix: handle null pointer in parser` |
|
|
121
|
+
| `perf:` | Changed | `perf: optimize database queries` |
|
|
122
|
+
| `docs:` | (skip) | `docs: update README` |
|
|
123
|
+
| `style:` | (skip) | `style: format code` |
|
|
124
|
+
| `refactor:` | (skip) | `refactor: simplify module` |
|
|
125
|
+
| `test:` | (skip) | `test: add unit tests` |
|
|
126
|
+
| `chore:` | (skip) | `chore: update dependencies` |
|
|
127
|
+
| `ci:` | (skip) | `ci: update GitHub Actions` |
|
|
128
|
+
|
|
129
|
+
### Breaking Changes
|
|
130
|
+
|
|
131
|
+
Mark breaking changes with `!` or `BREAKING CHANGE:` footer:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# Using ! suffix
|
|
135
|
+
feat!: redesign authentication API
|
|
136
|
+
|
|
137
|
+
# Using footer
|
|
138
|
+
feat: change password hashing algorithm
|
|
139
|
+
|
|
140
|
+
BREAKING CHANGE: passwords now require bcrypt hashing
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
These go into the **Changed** or **Removed** section, not Added.
|
|
144
|
+
|
|
145
|
+
## Auto-Generation from Git Commits
|
|
146
|
+
|
|
147
|
+
### Step 1: Get Commits Since Last Tag
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Find the last tag
|
|
151
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
152
|
+
|
|
153
|
+
# Get commits since that tag
|
|
154
|
+
if [ -z "$LAST_TAG" ]; then
|
|
155
|
+
git log --format="%H %s" | head -50
|
|
156
|
+
else
|
|
157
|
+
git log "${LAST_TAG}..HEAD" --format="%H %s"
|
|
158
|
+
fi
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Step 2: Parse Conventional Commits
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Extract type and description from commits
|
|
165
|
+
git log "${LAST_TAG}..HEAD" --format="%s" | while read line; do
|
|
166
|
+
TYPE=$(echo "$line" | cut -d: -f1)
|
|
167
|
+
DESC=$(echo "$line" | cut -d: -f2- | sed 's/^ //')
|
|
168
|
+
echo "$TYPE: $DESC"
|
|
169
|
+
done
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Step 3: Group by Category
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# Group features
|
|
176
|
+
git log "${LAST_TAG}..HEAD" --format="%s" | grep "^feat" | sed 's/^feat: /- /'
|
|
177
|
+
|
|
178
|
+
# Group fixes
|
|
179
|
+
git log "${LAST_TAG}..HEAD" --format="%s" | grep "^fix" | sed 's/^fix: /- /'
|
|
180
|
+
|
|
181
|
+
# Group breaking changes
|
|
182
|
+
git log "${LAST_TAG}..HEAD" --format="%B" | grep -A1 "BREAKING CHANGE:" | tail -n +2
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Complete Auto-Generation Script
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
#!/bin/bash
|
|
189
|
+
set -euo pipefail
|
|
190
|
+
|
|
191
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
192
|
+
RANGE="${LAST_TAG:+${LAST_TAG}..HEAD}"
|
|
193
|
+
|
|
194
|
+
echo "## [Unreleased]"
|
|
195
|
+
echo ""
|
|
196
|
+
|
|
197
|
+
# Added (feat commits)
|
|
198
|
+
FEATURES=$(git log ${RANGE:---all} --format="%s" | grep "^feat:" || echo "")
|
|
199
|
+
if [ -n "$FEATURES" ]; then
|
|
200
|
+
echo "### Added"
|
|
201
|
+
echo "$FEATURES" | sed 's/^feat: /- /'
|
|
202
|
+
echo ""
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
# Fixed (fix commits)
|
|
206
|
+
FIXES=$(git log ${RANGE:---all} --format="%s" | grep "^fix:" || echo "")
|
|
207
|
+
if [ -n "$FIXES" ]; then
|
|
208
|
+
echo "### Fixed"
|
|
209
|
+
echo "$FIXES" | sed 's/^fix: /- /'
|
|
210
|
+
echo ""
|
|
211
|
+
fi
|
|
212
|
+
|
|
213
|
+
# Breaking changes
|
|
214
|
+
BREAKING=$(git log ${RANGE:---all} --format="%B" | grep -A1 "BREAKING CHANGE:" | grep "^-" || echo "")
|
|
215
|
+
if [ -n "$BREAKING" ]; then
|
|
216
|
+
echo "### Changed"
|
|
217
|
+
echo "**Breaking Changes:**"
|
|
218
|
+
echo "$BREAKING"
|
|
219
|
+
echo ""
|
|
220
|
+
fi
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Version Bump Patterns
|
|
224
|
+
|
|
225
|
+
### Semantic Versioning
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
MAJOR.MINOR.PATCH
|
|
229
|
+
|
|
230
|
+
- MAJOR: Incompatible API changes (breaking changes)
|
|
231
|
+
- MINOR: Backward-compatible functionality additions
|
|
232
|
+
- PATCH: Backward-compatible bug fixes
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Decision Tree
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
Breaking change detected?
|
|
239
|
+
├─ Yes → MAJOR.0.0 (or X+1.0.0 from X.0.0)
|
|
240
|
+
└─ No
|
|
241
|
+
└─ feat: commits present?
|
|
242
|
+
├─ Yes → X.Y+1.0 (minor version bump)
|
|
243
|
+
└─ No → X.Y.Z+1 (patch version bump)
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Examples
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Current version: 1.5.0
|
|
250
|
+
|
|
251
|
+
# Patch release (bug fixes only)
|
|
252
|
+
1.5.1 # fix: memory leak in parser
|
|
253
|
+
|
|
254
|
+
# Minor release (new features, backward-compatible)
|
|
255
|
+
1.6.0 # feat: add config validation, feat: support ENV vars
|
|
256
|
+
|
|
257
|
+
# Major release (breaking changes)
|
|
258
|
+
2.0.0 # feat!: redesign CLI API, BREAKING CHANGE: remove old flags
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Release Workflow Example
|
|
262
|
+
|
|
263
|
+
### 1. During Development
|
|
264
|
+
|
|
265
|
+
Maintain `[Unreleased]` section in CHANGELOG.md:
|
|
266
|
+
|
|
267
|
+
```markdown
|
|
268
|
+
## [Unreleased]
|
|
269
|
+
|
|
270
|
+
### Added
|
|
271
|
+
- New dark mode theme
|
|
272
|
+
- User preference persistence
|
|
273
|
+
|
|
274
|
+
### Fixed
|
|
275
|
+
- Memory leak in event handler
|
|
276
|
+
- Incorrect timezone calculations
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### 2. Prepare Release
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# Determine new version (inspect commits)
|
|
283
|
+
LAST_VERSION="1.5.0"
|
|
284
|
+
COMMITS=$(git log v${LAST_VERSION}..HEAD --format="%s")
|
|
285
|
+
echo "$COMMITS" | grep -q "^feat:" && NEW_VERSION="1.6.0" || NEW_VERSION="1.5.1"
|
|
286
|
+
|
|
287
|
+
echo "Releasing version $NEW_VERSION"
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 3. Create Release Section
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Generate section from commits
|
|
294
|
+
NEW_DATE=$(date +%Y-%m-%d)
|
|
295
|
+
|
|
296
|
+
# Update CHANGELOG.md
|
|
297
|
+
sed -i '' "s/## \[Unreleased\]/## [Unreleased]\n\n*No unreleased changes*\n\n---\n\n## [$NEW_VERSION] - $NEW_DATE/" CHANGELOG.md
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### 4. Commit and Tag
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
git add CHANGELOG.md VERSION
|
|
304
|
+
git commit -m "chore: bump to version $NEW_VERSION"
|
|
305
|
+
git tag -a "v$NEW_VERSION" -m "Release $NEW_VERSION"
|
|
306
|
+
git push origin main --tags
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Integration with /release Command
|
|
310
|
+
|
|
311
|
+
The `/release` command in Pennyfarthing can use this skill for:
|
|
312
|
+
|
|
313
|
+
1. **Auto-detecting new commits** - Run conventional commit analysis since last tag
|
|
314
|
+
2. **Generating changelog sections** - Create properly formatted entries
|
|
315
|
+
3. **Version bumping** - Semantic versioning based on commit types
|
|
316
|
+
4. **Tagging** - Create annotated tags for releases
|
|
317
|
+
|
|
318
|
+
Reference in `/release` command:
|
|
319
|
+
|
|
320
|
+
```markdown
|
|
321
|
+
See the [Changelog Skill](/changelog) for patterns on:
|
|
322
|
+
- Maintaining CHANGELOG.md
|
|
323
|
+
- Parsing conventional commits
|
|
324
|
+
- Auto-generating release notes
|
|
325
|
+
- Version bump decisions
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Best Practices
|
|
329
|
+
|
|
330
|
+
1. **Commit message quality** - Enforce conventional commits in CI/CD
|
|
331
|
+
2. **Review before release** - Manual changelog review catches automation gaps
|
|
332
|
+
3. **One changelog file** - Single CHANGELOG.md in project root
|
|
333
|
+
4. **Link to releases** - Provide direct links to tags/release pages
|
|
334
|
+
5. **Backfill old changes** - If starting Keep a Changelog mid-project, document recent versions
|
|
335
|
+
6. **Human-friendly descriptions** - Conventional commits are machine-parseable; enhance for humans
|
|
336
|
+
7. **Changelog in PR reviews** - Ensure PR descriptions clarify what should be in changelog
|
|
337
|
+
|
|
338
|
+
## Tools and Automation
|
|
339
|
+
|
|
340
|
+
### Conventional Commits Linting
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
# Install commitlint
|
|
344
|
+
npm install --save-dev @commitlint/config-conventional @commitlint/cli
|
|
345
|
+
|
|
346
|
+
# Configure .commitlintrc.js
|
|
347
|
+
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > .commitlintrc.js
|
|
348
|
+
|
|
349
|
+
# Test a message
|
|
350
|
+
echo "feat: add new feature" | commitlint
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Automatic Changelog Generation
|
|
354
|
+
|
|
355
|
+
Tools that auto-generate from commits:
|
|
356
|
+
|
|
357
|
+
- **conventional-changelog** - Node.js package
|
|
358
|
+
- **changie** - Go-based with template support
|
|
359
|
+
- **git-cliff** - Rust-based with flexible templates
|
|
360
|
+
|
|
361
|
+
Example with conventional-changelog:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
npm install --save-dev conventional-changelog-cli
|
|
365
|
+
npx conventional-changelog -p angular -i CHANGELOG.md -s
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### CI/CD Integration
|
|
369
|
+
|
|
370
|
+
```yaml
|
|
371
|
+
# GitHub Actions example
|
|
372
|
+
- name: Generate Changelog
|
|
373
|
+
run: |
|
|
374
|
+
npx conventional-changelog -p angular -i CHANGELOG.md -s
|
|
375
|
+
git add CHANGELOG.md
|
|
376
|
+
git commit -m "docs: update CHANGELOG" || echo "No changes"
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## Reference Documentation
|
|
380
|
+
|
|
381
|
+
- **Keep a Changelog:** https://keepachangelog.com/
|
|
382
|
+
- **Conventional Commits:** https://www.conventionalcommits.org/
|
|
383
|
+
- **Semantic Versioning:** https://semver.org/
|
|
384
|
+
- **conventional-changelog:** https://github.com/conventional-changelog/conventional-changelog
|
|
385
|
+
- **Pennyfarthing Release:** `/release` command
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Code review checklists and patterns for Pennyfarthing. Use when reviewing PRs, self-reviewing code, or checking for common issues before commit.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code Review Skill
|
|
7
|
+
|
|
8
|
+
<run>Review code against the checklists below. Focus on authorization, error handling, TypeScript/React patterns, and performance.</run>
|
|
9
|
+
|
|
10
|
+
<output>Code review comments using [MUST FIX], [SUGGESTION], [QUESTION], [NICE] prefixes</output>
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
This skill provides code review patterns and checklists for the Pennyfarthing project. Use this when reviewing PRs or self-reviewing before commit.
|
|
15
|
+
|
|
16
|
+
## Review Checklists
|
|
17
|
+
|
|
18
|
+
### API Handler Review
|
|
19
|
+
|
|
20
|
+
- [ ] **Authorization check present** - Uses `utils.GetClientIDsForQuery()` for admin bypass
|
|
21
|
+
- [ ] **Input validation** - Request body and params validated
|
|
22
|
+
- [ ] **Error handling** - Appropriate status codes, no internal leaks
|
|
23
|
+
- [ ] **Response format** - Consistent with other endpoints
|
|
24
|
+
- [ ] **Tests** - Cover happy path + edge cases + error cases
|
|
25
|
+
|
|
26
|
+
### UI Component Review
|
|
27
|
+
|
|
28
|
+
- [ ] **Props typed correctly** - Interface defined, no `any`
|
|
29
|
+
- [ ] **Loading states** - Shows spinner/skeleton while fetching
|
|
30
|
+
- [ ] **Error states** - Graceful error display with retry option
|
|
31
|
+
- [ ] **Empty states** - Meaningful message when no data
|
|
32
|
+
- [ ] **Accessibility** - Proper ARIA labels, keyboard navigation
|
|
33
|
+
- [ ] **No hardcoded strings** - Ready for i18n
|
|
34
|
+
|
|
35
|
+
### Database Changes
|
|
36
|
+
|
|
37
|
+
- [ ] **Migration reversible** - Can roll back cleanly
|
|
38
|
+
- [ ] **Indexes present** - For common query patterns
|
|
39
|
+
- [ ] **FK constraints** - Appropriate relationships defined
|
|
40
|
+
- [ ] **NULL semantics** - Comments explain NULL meaning
|
|
41
|
+
- [ ] **Default values** - Sensible defaults for new columns
|
|
42
|
+
|
|
43
|
+
### TypeScript/React
|
|
44
|
+
|
|
45
|
+
- [ ] **Type imports use `import type`** - Required for build
|
|
46
|
+
- [ ] **No unused imports** - Remove or use
|
|
47
|
+
- [ ] **No `any` types** - Use proper types
|
|
48
|
+
- [ ] **useCallback/useMemo** - For expensive operations in deps
|
|
49
|
+
- [ ] **Error boundaries** - Around risky components
|
|
50
|
+
|
|
51
|
+
## Common Review Issues
|
|
52
|
+
|
|
53
|
+
### Authorization
|
|
54
|
+
|
|
55
|
+
```go
|
|
56
|
+
// BAD - blocks admins with empty ClientIDs
|
|
57
|
+
if len(clientIDs) == 0 {
|
|
58
|
+
return http.StatusForbidden
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// GOOD - use centralized utility
|
|
62
|
+
clientIDs, err := utils.GetClientIDsForQuery(user, h.db)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Error Messages
|
|
66
|
+
|
|
67
|
+
```go
|
|
68
|
+
// BAD - leaks internals
|
|
69
|
+
http.Error(w, err.Error(), 500)
|
|
70
|
+
|
|
71
|
+
// GOOD - generic message, log details
|
|
72
|
+
log.Error("database error", "error", err, "user_id", user.ID)
|
|
73
|
+
http.Error(w, "Internal server error", 500)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### TypeScript Imports
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// BAD - causes build errors
|
|
80
|
+
import { SomeType } from './types';
|
|
81
|
+
|
|
82
|
+
// GOOD
|
|
83
|
+
import type { SomeType } from './types';
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### React Query
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
// BAD - query runs even when not ready
|
|
90
|
+
const { data } = useQuery({
|
|
91
|
+
queryKey: ['items', clientId],
|
|
92
|
+
queryFn: () => fetchItems(clientId),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// GOOD - only runs when clientId is set
|
|
96
|
+
const { data } = useQuery({
|
|
97
|
+
queryKey: ['items', clientId],
|
|
98
|
+
queryFn: () => fetchItems(clientId),
|
|
99
|
+
enabled: !!clientId,
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Approval Criteria
|
|
104
|
+
|
|
105
|
+
### Must Have for Approval
|
|
106
|
+
|
|
107
|
+
1. **Tests pass** - All CI checks green
|
|
108
|
+
2. **No security issues** - Auth, input validation, no SQL injection
|
|
109
|
+
3. **No breaking changes** - Or migration path provided
|
|
110
|
+
4. **Code follows patterns** - Consistent with existing codebase
|
|
111
|
+
|
|
112
|
+
### Nice to Have
|
|
113
|
+
|
|
114
|
+
1. Documentation updated
|
|
115
|
+
2. Performance considered
|
|
116
|
+
3. Error messages helpful
|
|
117
|
+
4. Edge cases handled
|
|
118
|
+
|
|
119
|
+
## Security Checklist
|
|
120
|
+
|
|
121
|
+
- [ ] **No SQL injection** - Use parameterized queries
|
|
122
|
+
- [ ] **No XSS** - Sanitize user input in UI
|
|
123
|
+
- [ ] **Auth on all endpoints** - Middleware applied
|
|
124
|
+
- [ ] **Client isolation** - Multi-tenant data filtered
|
|
125
|
+
- [ ] **No secrets in code** - Use env vars or KMS
|
|
126
|
+
- [ ] **SSRF protection** - URL validation for external calls
|
|
127
|
+
|
|
128
|
+
## Performance Checklist
|
|
129
|
+
|
|
130
|
+
- [ ] **N+1 queries** - Use preloading/joins
|
|
131
|
+
- [ ] **Pagination** - For list endpoints
|
|
132
|
+
- [ ] **Indexes** - For filtered/sorted columns
|
|
133
|
+
- [ ] **Memoization** - For expensive React renders
|
|
134
|
+
- [ ] **Bundle size** - No unnecessary imports
|
|
135
|
+
|
|
136
|
+
## Review Comments Format
|
|
137
|
+
|
|
138
|
+
### Requesting Changes
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
**[MUST FIX]** This leaks internal error details to the client.
|
|
142
|
+
Suggest: Use a generic message and log the details server-side.
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Suggestions
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
**[SUGGESTION]** Consider using `useMemo` here since this calculation
|
|
149
|
+
runs on every render.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Questions
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
**[QUESTION]** What happens if `clientId` is undefined? Should we
|
|
156
|
+
add an early return or enabled flag?
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Praise
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
**[NICE]** Good use of the centralized auth utility here!
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Recent Learnings
|
|
166
|
+
|
|
167
|
+
| Date | Issue | Resolution |
|
|
168
|
+
|------|-------|------------|
|
|
169
|
+
| Dec 2024 | Admin 403 errors | Use `GetClientIDsForQuery()` |
|
|
170
|
+
| Dec 2024 | Type import errors | Use `import type` |
|
|
171
|
+
| Dec 2024 | Role-based filtering | Check analyst vs manager vs admin |
|
|
172
|
+
| Dec 2024 | Error boundaries | Wrap risky components |
|