split-pr

0
0
Source

Analyzes current changes and suggests how to split them into smaller, reviewable PRs

Install

mkdir -p .claude/skills/split-pr && curl -L -o skill.zip "https://mcp.directory/api/skills/download/6869" && unzip -o skill.zip -d .claude/skills/split-pr && rm skill.zip

Installs to .claude/skills/split-pr

About this skill

Split Large PR into Smaller Changes

Purpose

Help developers break down large changesets into logical, reviewable pull requests. This skill analyzes the current diff and proposes a splitting strategy that keeps changes atomic and reviewable.

Instructions

1. Analyze Current Changes

Run these commands to understand the scope:

# Get detailed file statistics
git diff main...HEAD --stat

# List all changed files
git diff main...HEAD --name-only

# Show commit history for context
git log main...HEAD --oneline

# Count non-generated files changed
git diff main...HEAD --name-only | grep -v 'vendor/' | grep -v '\.pb\.go$' | grep -v 'zz_generated' | grep -v '^docs/' | wc -l

# Count lines changed (excluding generated code)
git diff main...HEAD --stat -- . ':(exclude)vendor/*' ':(exclude)*.pb.go' ':(exclude)zz_generated*' ':(exclude)docs/*' | tail -1

2. Evaluate Size and Complexity

Assess whether the changes exceed recommended limits:

  • Target limits per PR:
    • < 10 files changed (excluding tests, generated code, docs)
    • < 400 lines of code changed (excluding tests, generated code, docs)
    • Changes represent one logical unit of work

If changes exceed these limits or mix multiple concerns, proceed to split analysis.

3. Identify Logical Groupings

Examine the changed files and identify natural boundaries:

  • By component/package: Group changes by the package or component they affect
  • By layer: Separate model changes, business logic, API changes, CLI changes
  • By concern: Separate refactoring from new features, bug fixes from enhancements
  • By dependency: Identify which changes depend on others

Use these commands to help:

# Group changed files by directory
git diff main...HEAD --name-only | grep -v 'vendor/' | grep -v '\.pb\.go$' | cut -d'/' -f1-2 | sort | uniq -c

# Show changes by package
git diff main...HEAD --name-only | grep '\.go$' | grep -v '_test\.go$' | cut -d'/' -f1-3 | sort | uniq -c

4. Propose Split Strategy

Create a structured plan with multiple PRs:

For each proposed PR, specify:

  • PR Name: Brief description (e.g., "Add base container interface")
  • Purpose: What this PR accomplishes and why it's needed
  • Files included: List of files that would be in this PR
  • Estimated size: Approximate lines changed
  • Dependencies: Which other proposed PRs this depends on (if any)
  • Test coverage: What tests are included
  • Order: Suggest the sequence for creating PRs (e.g., "Create this first")

5. Recommend Creation Order

Determine the optimal order for creating PRs:

  1. Foundation PRs first: New interfaces, base types, shared utilities
  2. Refactoring PRs second: Changes that use the new foundation
  3. Feature PRs last: New functionality that builds on the foundation
  4. Independent PRs anytime: Changes that don't depend on others

6. Present Action Plan

Provide a clear, actionable plan:

## Proposed PR Split

### Summary
Currently [X] files changed with [Y] lines modified. Recommend splitting into [N] PRs:

### PR 1: [Name] (Create First)
**Purpose**: [What and why]
**Files**:
- path/to/file1.go
- path/to/file2.go
**Size**: ~100 LOC
**Dependencies**: None
**Tests**: Includes unit tests for new functionality

### PR 2: [Name] (After PR 1)
**Purpose**: [What and why]
**Files**:
- path/to/file3.go
**Size**: ~150 LOC
**Dependencies**: Requires PR 1 (uses new interface)
**Tests**: Integration tests

[... continue for each PR ...]

## Next Steps
1. Would you like me to help create PR 1 first?
2. Should I create a tracking issue for the overall work?
3. Any changes to this split strategy?

Best Practices

Splitting Principles

  • Each PR should pass tests independently: Don't create PRs that break builds
  • Prefer multiple small PRs over one large PR: Easier to review and revert
  • Keep related changes together: Don't artificially split code that changes together
  • Foundation before features: Establish abstractions before using them
  • Use feature flags for incomplete work: If a feature spans multiple PRs

Common Split Patterns

  1. Refactoring + Feature:

    • PR 1: Extract interface and refactor existing code
    • PR 2: Add new feature using the interface
  2. Multi-layer Feature:

    • PR 1: Add data models and database changes
    • PR 2: Add business logic layer
    • PR 3: Add API endpoints
    • PR 4: Add CLI commands
  3. Package Restructuring:

    • PR 1: Create new package structure (empty or minimal)
    • PR 2: Move code to new structure
    • PR 3: Update imports and references
    • PR 4: Clean up old structure
  4. Kubernetes Operator Changes:

    • PR 1: Update CRD definitions and generate code
    • PR 2: Update controller logic
    • PR 3: Add validation and defaulting
    • PR 4: Update documentation and examples

What NOT to Split

  • Atomic refactorings: Renaming that touches many files but is one logical change
  • Generated code updates: Proto, CRD, mock updates should stay together
  • Dependency updates: Keep go.mod and vendor changes in one PR
  • Tightly coupled changes: Changes that don't make sense independently

Examples

Example 1: Adding New CLI Command

Current state: 8 files changed, 450 lines

Split strategy:

  • PR 1: Add business logic to pkg/ package (3 files, 200 lines)
  • PR 2: Add CLI command and E2E tests (5 files, 250 lines)

Rationale: Business logic is independently testable and reusable

Example 2: Refactoring + Feature

Current state: 15 files changed, 800 lines

Split strategy:

  • PR 1: Extract common interface (2 files, 100 lines)
  • PR 2: Refactor existing implementations to use interface (6 files, 300 lines)
  • PR 3: Add new implementation with feature (7 files, 400 lines)

Rationale: Each PR is independently valuable and testable

Example 3: Operator Enhancement

Current state: 12 files changed, 600 lines

Split strategy:

  • PR 1: Update CRD with new fields and generate code (4 files, 150 lines, mostly generated)
  • PR 2: Update controller to handle new fields (5 files, 300 lines)
  • PR 3: Add validation webhook (3 files, 150 lines)

Rationale: Each PR represents a complete vertical slice of functionality

User Interaction

After presenting the split strategy:

  1. Ask for feedback: "Does this split make sense for your workflow?"
  2. Offer to adjust: Be flexible based on user's preferences
  3. Help with first PR: "Would you like me to help create PR 1?"
  4. Create tracking: "Should I create a GitHub issue to track all PRs?"

Notes

  • Be pragmatic: The goal is reviewable PRs, not arbitrary rules
  • Consider the team: Some teams prefer different split strategies
  • Document dependencies: Make it clear which PRs block others
  • Test independently: Each PR should pass CI/CD checks

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

641968

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

590705

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

339397

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

318395

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

450339

fastapi-templates

wshobson

Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.

304231

Stay ahead of the MCP ecosystem

Get weekly updates on new skills and servers.