Skip to main content
skill CX Codex

pre-merge — Claude Code skill: checks before you merge

A checklist skill that runs types, lint and tests before commit, before the PR and before merging to main. Useful when you would rather not find breakage during review.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add bobmatnyc/claude-mpm-skills --skill pre-merge -a claude-code
Open on GitHub

What pre-merge does

The skill splits merge prep into three stages. Before committing: type checking, linting, local tests, no leftover console.log or commented-out blocks. Before opening a PR: a written summary, ticket references, screenshots for UI work, new tests, updated docs. Before merging to main: green CI, an approving reviewer, no conflicts, migrations that ran, and a rollback plan.

Each language gets its own commands. TypeScript and JavaScript use npx tsc --noEmit, npm run lint, npm test; Python uses mypy src/, pylint src/, pytest; Go uses gofmt -l ., golangci-lint run, go test ./.... Separate sections cover API security (auth on protected routes, input validation with Zod or Pydantic, SQL injection and XSS) and schema changes: create the migration, test it locally and on staging, keep a down migration.

There is a PR description template with sections for testing, screenshots, breaking changes, performance impact and rollback. At the end, a sample pre-commit.sh and hook setup through Husky or pre-commit. The skill is marked user-invocable: false and disable-model-invocation: true, so neither you nor the model triggers it as a command — it is reference material you read while working. If the project has no linter or test suite yet, half the checklist has nothing to run against, which is a good reason to add npm test or pytest first.

What it helps with

  • run types, lint and tests before committing
  • write a PR description with screenshots and ticket links
  • verify database migrations before merging to main
  • walk the API security checklist on changed endpoints
  • set up a pre-commit hook with Husky or pre-commit

Example prompts for the agent

  • Walk me through the pre-merge checklist before I open the PR
  • Check my changes against pre-merge: types, lint, tests
  • Draft the PR description using the pre-merge template

How to install pre-merge

1Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill pre-merge -a claude-code

2Manually: put the files in place

~/.claude/skills/pre-merge/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/pre-merge/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about pre-merge

How do I install pre-merge in Claude?

Run npx skills add bobmatnyc/claude-mpm-skills --skill pre-merge -a claude-code. The skill lands in ~/.claude/skills/pre-merge/SKILL.md.

What does pre-merge do?

It is a verification checklist for three moments: before commit, before opening a PR, and before merging to main. It covers types, lint, tests, migrations, API security and a rollback plan, plus a PR template and a sample pre-commit.sh.

Why can't I invoke the skill manually?

It sets user-invocable: false and disable-model-invocation: true. You read it and follow the steps rather than calling it as a command.

Source text

SKILL.md · MIT
---
name: pre-merge
description: "Comprehensive verification workflow before merging changes to production."
user-invocable: false
disable-model-invocation: true
version: 1.0.0
tags: []
progressive_disclosure:
  entry_point:
    summary: "Comprehensive verification workflow before merging changes to production."
    when_to_use: "When working with version control, branches, or pull requests."
    quick_start: "1. Review the core concepts below. 2. Apply patterns to your use case. 3. Follow best practices for implementation."
---
# Pre-Merge Verification

Comprehensive verification workflow before merging changes to production.

## When to Use This Skill

Use this skill when:
- Creating a pull request for review
- About to merge code to main/production branch
- Need systematic verification checklist
- Want to catch issues before code review

## Pre-Commit Verification

Before committing code, verify:
- [ ] Type checking passes (language-appropriate: `tsc --noEmit`, `mypy`, etc.)
- [ ] Linting passes with no errors (ESLint, Pylint, etc.)
- [ ] All existing tests pass locally
- [ ] No console.log/debug statements left in code
- [ ] Code follows project style guide
- [ ] No commented-out code blocks

### Commands by Language

**TypeScript/JavaScript**:
```bash
# Type check
npx tsc --noEmit

# Lint
npm run lint
# or: pnpm lint
# or: npx eslint .

# Tests
npm test
# or: pnpm test
```

**Python**:
```bash
# Type check
mypy src/

# Lint
pylint src/
# or: flake8 src/
# or: ruff check src/

# Tests
pytest
# or: python -m pytest
```

**Go**:
```bash
# Format check
gofmt -l .

# Lint
golangci-lint run

# Tests
go test ./...
```

## Pre-PR Verification

Before creating a pull request, ensure:

### Required Information
- [ ] Changeset added for user-facing changes (if using changesets)
- [ ] PR description is complete with:
  - [ ] Summary of changes
  - [ ] Related ticket references (ENG-XXX, HEL-XXX, JIRA-XXX, etc.)
  - [ ] Screenshots for UI changes (desktop, tablet, mobile)
  - [ ] Breaking changes documented
  - [ ] Migration guide (if breaking changes)
- [ ] New tests added for new functionality
- [ ] Documentation updated if needed (README, API docs, etc.)

### Security Checklist (if API changes)
- [ ] Authentication required on protected routes
- [ ] Authorization checks implemented
- [ ] Input validation with schema (Zod, Pydantic, etc.)
- [ ] No sensitive data in logs
- [ ] No SQL injection vulnerabilities
- [ ] No XSS vulnerabilities
- [ ] Rate limiting considered

### Database Changes (if schema changes)
- [ ] Migration file created
- [ ] Migration tested on local database
- [ ] Migration tested on staging database
- [ ] Down migration available (rollback plan)
- [ ] No breaking changes without migration guide
- [ ] Schema changes documented

### UI Changes (if applicable)
- [ ] Screenshots included:
  - [ ] Desktop view (1920x1080)
  - [ ] Tablet view (768x1024)
  - [ ] Mobile view (375x667)
- [ ] Responsive behavior verified
- [ ] Accessibility checked (keyboard navigation, screen readers)
- [ ] Loading states implemented
- [ ] Error states implemented

## Pre-Merge Verification

Before merging to main branch, confirm:

### CI/CD Checks
- [ ] All CI checks pass (lint, type-check, tests, build)
- [ ] Code review approved by at least one reviewer
- [ ] No TypeScript errors in changed files
- [ ] No merge conflicts with target branch
- [ ] Build succeeds without warnings

### Functional Verification
- [ ] Database migrations run successfully (if applicable)
- [ ] No regression in existing functionality
- [ ] Performance benchmarks within acceptable range
- [ ] Manual testing completed for critical paths

### Documentation
- [ ] CHANGELOG.md updated (if using)
- [ ] API documentation updated (if API changes)
- [ ] README updated (if setup/usage changes)
- [ ] Migration guide provided (if breaking changes)

## PR Description Template

Use this template for comprehensive PR descriptions:

```markdown
## Summary
[Brief description of what this PR does]

## Related Tickets
- Fixes #123
- Closes ENG-456
- Related to HEL-789

## Changes
- [ ] Feature: [Description]
- [ ] Bug Fix: [Description]
- [ ] Refactor: [Description]
- [ ] Documentation: [Description]

## Testing
### Unit Tests
- Added tests for [feature/function]
- Coverage: X%

### Manual Testing
- [ ] Tested on desktop (Chrome, Firefox, Safari)
- [ ] Tested on mobile (iOS Safari, Android Chrome)
- [ ] Tested edge cases: [list specific cases]

## Screenshots
### Desktop
![Desktop view](screenshot-url)

### Tablet
![Tablet view](screenshot-url)

### Mobile
![Mobile view](screenshot-url)

## Breaking Changes
[List any breaking changes or write "None"]

### Migration Guide
[If breaking changes, provide migration steps]

## Performance Impact
[Describe any performance implications or write "No impact"]

## Security Considerations
[Describe security implications or write "No security impact"]

## Rollback Plan
[Describe how to rollback if issues occur]

## Deployment Notes
[Any special deployment considerations or write "Standard deployment"]
```

## Common Pitfalls to Avoid

### Pre-Commit
- ❌ Committing code with failing tests
- ❌ Leaving console.log/debug statements
- ❌ Committing without running type checker
- ❌ Committing large blocks of commented code

### Pre-PR
- ❌ Creating PR without description
- ❌ Missing screenshots for UI changes
- ❌ Not linking to related tickets
- ❌ Not documenting breaking changes
- ❌ Missing test coverage for new code

### Pre-Merge
- ❌ Merging with failing CI checks
- ❌ Merging without code review approval
- ❌ Merging with merge conflicts
- ❌ Merging without testing migrations
- ❌ Merging without considering rollback plan

## Quick Verification Script

Create a pre-commit verification script:

**JavaScript/TypeScript (pre-commit.sh)**:
```bash
#!/bin/bash
set -e

echo "Running type check..."
npx tsc --noEmit

echo "Running linter..."
npm run lint

echo "Running tests..."
npm test -- --run

echo "✅ All checks passed!"
```

**Python (pre-commit.sh)**:
```bash
#!/bin/bash
set -e

echo "Running type check..."
mypy src/

echo "Running linter..."
pylint src/

echo "Running tests..."
pytest

echo "✅ All checks passed!"
```

Make executable:
```bash
chmod +x pre-commit.sh
```

## Automation with Git Hooks

Set up automatic pre-commit checks:

### Using Husky (JavaScript/TypeScript)
```bash
npm install --save-dev husky
npx husky install
npx husky add .husky/pre-commit "npm run lint && npm test"
```

### Using pre-commit (Python)
Create `.pre-commit-config.yaml`:
```yaml
repos:
  - repo: local
    hooks:
      - id: type-check
        name: Type Check
        entry: mypy src/
        language: system
        pass_filenames: false
      - id: lint
        name: Lint
        entry: pylint src/
        language: system
        pass_filenames: false
      - id: test
        name: Test
        entry: pytest
        language: system
        pass_filenames: false
```

Install hooks:
```bash
pre-commit install
```

## Success Criteria

### Pre-Commit Success
- ✅ All local checks pass
- ✅ Code is formatted correctly
- ✅ No debug statements remain
- ✅ Tests pass locally

### Pre-PR Success
- ✅ PR description is comprehensive
- ✅ All required information included
- ✅ Screenshots attached (if UI changes)
- ✅ Breaking changes documented

### Pre-Merge Success
- ✅ CI pipeline is green
- ✅ Code review approved
- ✅ No conflicts with target branch
- ✅ Manual testing completed

## Related Skills

- `universal-verification-screenshot` - Screenshot verification for UI changes
- `universal-verification-bug-fix` - Bug fix verification workflow
- `toolchains-universal-security-api-review` - API security testing
- `universal-collaboration-git-workflow` - Git workflow best practices

© bobmatnyc · MIT · bobmatnyc/claude-mpm-skills

Similar skills

All skills for Git and GitHub →

From the same set65

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor