From playbooks-virtuoso
Generates structured pull request descriptions from git diffs, including technical docs, testing instructions, and verification queries. Framework-agnostic for documenting code changes.
npx claudepluginhub krzysztofsurdy/code-virtuoso --plugin playbooks-virtuosoThis skill uses the workspace's default tool permissions.
Write comprehensive, well-structured pull request descriptions by analyzing code changes and following established best practices for technical documentation.
Analyzes git branch changes, runs code review swarm, generates friendly PR description and structured test plan, then pushes and creates GitHub pull request. Triggered by 'create a PR' or /pr-create.
Generates pull request descriptions from git diffs/commits with conventional titles, summaries, checklists, metadata, and reviewer tips to aid reviews.
Drafts conventional commit PR titles and Shopware 5-section descriptions for core PRs targeting trunk. Analyzes branch against trunk, uses session context, asks for missing info.
Share bugs, ideas, or general feedback.
Write comprehensive, well-structured pull request descriptions by analyzing code changes and following established best practices for technical documentation.
Determine the main branch:
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
Falls back to main or master if not set.
Find the merge base:
MAIN_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
MERGE_BASE=$(git merge-base HEAD origin/$MAIN_BRANCH)
Collect all changes since the branch diverged:
git log --oneline $MERGE_BASE..HEAD
git diff --stat $MERGE_BASE..HEAD
git diff $MERGE_BASE..HEAD
If a ticket ID or branch name is provided as an argument, include it in the PR title.
Gather ticket context. The ticket content is essential for writing accurate testing instructions and understanding the business requirement. If the ticket content is available in context (e.g., from a previous conversation or your project tracker), use it. If it is NOT available or has fallen out of context, ask the user to provide the ticket content before proceeding. Do not guess or invent requirements.
Read every changed file and understand:
Use the PR message template for structure: template
Review real-world examples for tone and detail level: examples
Apply the appropriate sections based on what the PR touches:
| Category | When to Include |
|---|---|
| Database and Entity/Model Changes | New tables, columns, migrations, schema changes |
| API Changes (REST/GraphQL) | New or modified endpoints, query/mutation changes |
| Admin Interface Changes | New admin pages, filters, list views, form fields |
| Caching and Performance | Cache keys, invalidation, query optimization |
| Security and Permissions | Auth rules, role checks, access control changes |
| Event Handling | New events, handlers, message queue changes |
| Testing | New or modified test cases, fixtures, test utilities |
Before writing testing scenarios, ask the user whether they want testing scenarios included in this PR message. Testing scenarios are optional. If the user declines, skip this step entirely and omit the "Test scenarios" section from the PR message. Still include the "Testing instructions" section with basic verification steps and database queries if applicable.
If the user wants testing scenarios included:
Target audience: QA testers with ZERO codebase knowledge. They do not know about internal code structure, classes, services, or any implementation details. Write every instruction as if explaining to someone who has never seen the code and never will.
Rules for testing instructions:
- [ ] **Scenario N: Name** so QA can tick them offWhen a scenario involves navigating to a page, search the codebase for the actual route/URL rather than guessing or using placeholder URLs. Look in:
Always provide the real relative URL path (e.g., /en/account/internal-store) rather than generic placeholders like https://your-staging.example.com/store. If the route has dynamic segments, show the pattern and explain what to substitute (e.g., /en/account/store/checkout/{packageId} -- replace {packageId} with the ID from the previous step).
When a feature is reachable through the UI, lead with the UI navigation -- describe how to get there by clicking through menus and buttons. Only fall back to direct URL navigation when there is no UI path or the UI path is too many clicks deep.
Always provide concrete, realistic test data that QA can copy-paste directly. Never say "enter a valid credit card" or "use test credentials" without giving the actual values.
Common test data to include when relevant:
4242 4242 4242 4242 (Visa, succeeds), 4000 0000 0000 3220 (3D Secure required), 4000 0000 0000 0002 (declined). Expiry: any future date (e.g., 12/34). CVC: any 3 digits (e.g., 123)4111 1111 1111 1111 (Visa), 5500 0000 0000 0004 (Mastercard). Expiry: 03/30. CVC: 737qa-tester+scenario1@example.com)+1 555 0100 for US test)2025-01-15)3, not "some items")If the project uses a specific payment provider, search for its test mode configuration in the codebase (look for environment variable keys related to payment, payment config files) to determine which test card numbers apply.
When test data requires database setup (e.g., a specific user account, a product with certain stock), provide the exact SQL INSERT or describe the UI steps to create it.
For every PR, include:
Before finalizing the PR message, verify:
- [ ]) and an "Expected results" bullet list| Reference | Contents |
|---|---|
| PR message template | Structured template for PR descriptions with all optional sections |
| Example PR messages | Real-world examples for features, bug fixes, and admin changes |
| Situation | Recommended Skill |
|---|---|
| Starting work on a ticket end-to-end | ticket-delivery |
| Generating a summary report after completing work | report-writer |
| Reviewing code before writing the PR | code-review-excellence |
| Requesting a code review from teammates | requesting-code-review |