resolve-pegasus-conflicts
from saaspegasus/skills
A collection of skills for working with Django / SaaS Pegasus codebases
npx skills add https://github.com/saaspegasus/skills --skill resolve-pegasus-conflictsSKILL.md
Resolve Pegasus Conflicts
Instructions
This skill helps users resolve merge conflicts when upgrading their SaaS Pegasus codebase. Most users will invoke this skill when they have merge conflicts after merging their main branch into a Pegasus upgrade branch, but you can also help run the merge process for them.
When invoked
First, determine what the user needs help with by checking their current state:
- Check git status: Run
git statusto see if there's an active merge in progress - Ask the user: If unclear, ask whether they:
- Already ran
git mergeand need help resolving conflicts (most common) - Want you to run the merge process for them
- Need help understanding which conflicts to prioritize
- Already ran
If there's an active merge with conflicts
The user has already run git merge <main branch> and has conflicts to resolve. Help them resolve the conflicts using these strategies:
Database Migrations
- Strategy: Discard Pegasus migration changes, keep the user's changes
- Reason: Migration files should be regenerated, not merged
- Action: For conflicted migration files, accept theirs (the user's version from main), then run
./manage.py makemigrationsafter all conflicts are resolved - Git command:
git checkout --theirs <migration-file>for each conflicted migration
Dependency Lock Files (uv.lock, requirements.txt, package-lock.json)
- Strategy: Accept Pegasus changes to lock files, merge source files manually
- Source files:
pyproject.toml,requirements.in,package.json - Lock files:
uv.lock,requirements.txt,package-lock.json - Action:
- For source files: Merge carefully, keeping customizations
- For lock files: Accept ours (Pegasus version) with
git checkout --ours <lock-file>andgit add <lock-file> - Immediately regenerate: Run
uv sync(for uv.lock) ornpm install(for package-lock.json) right after resolving to ensure dependencies are properly synced
- Important: Don't wait until post-merge steps - regenerate lock files immediately after resolving them
Static Assets (JavaScript/CSS bundles in static/)
- Strategy: Delete and regenerate
- Action: Accept either version (doesn't matter), will be rebuilt
- Regenerate: Run
npm run buildornpm run devafter merge
Configuration Files (.env.example, settings files)
- Strategy: Merge carefully, keep customizations
- Action: Review both sides and combine them intelligently
Other Files
- Strategy: Evaluate case-by-case
- Action: Read both versions, understand the changes, merge intelligently
If running the full merge process
If the user wants you to run the merge:
- Fetch latest changes: Run
git fetchto download the latest branches and commits from the remote (this ensures you can see the latest Pegasus upgrade branch) - Find the latest upgrade branch: Run
git branch -ato list all branches and look for the latest Pegasus upgrade branch (usually prefixed withpegasus-YYYY.MM, e.g.,pegasus-2025.01) - Check current branch: Run
git statusto see if they're already on the upgrade branch - Checkout the upgrade branch: If not already on it, run
git checkout <pegasus-branch-name> - Pull latest changes: Run
git pullto ensure the upgrade branch is up to date with the remote - Identify main branch: Determine the main development branch (usually
mainormaster) - Run merge: Execute
git merge <main-branch>to merge the main development branch into the Pegasus upgrade branch - Handle result:
- If no conflicts: Success! Proceed to post-merge steps
- If conflicts: Follow the conflict resolution strategies above
Post-merge steps
After all conflicts are resolved and the merge is complete, ask the user if they want to proceed with the post-merge steps or if they prefer to do them manually later.
If the user wants to proceed, run these steps:
- Database migrations: Run
./manage.py makemigrationsto create new migrations if needed - Dependency sync:
- Python:
uv sync(orpip install -r requirements.txt) - JavaScript:
npm install
- Python:
- Build assets:
npm run build(ornpm run devfor development) - Optional - Run migrations:
./manage.py migrateto apply database changes - Optional - Docker users: They can run
make upgradeinstead of manual steps above - Push to GitHub: Run
git pushto push the merged changes to GitHub. Once pushed, the upgrade branch should be ready to merge into the main branch via pull request
If the user prefers to do these manually, inform them what steps they should take when ready.
Important reminders
- Enable rerere: Suggest running
git config rerere.enabled trueto remember conflict resolutions for future upgrades - Never squash: When merging Pegasus PRs in GitHub, always use "Create a merge commit" (not squash or rebase)
- Review changes
...