commit d675d447fc0b2c2aff980dec8f9d0ea7a2a3f9e3 Author: Zhongwei Li Date: Sun Nov 30 08:44:59 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..31e762c --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "jmo-development-tools", + "description": "Custom commands, agents, and skills for NixOS, Jujutsu, and documentation workflows", + "version": "0.0.0-2025.11.28", + "author": { + "name": "jmo", + "email": "jmo@example.com" + }, + "skills": [ + "./skills/SKILL.md" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..70a5aa5 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# jmo-development-tools + +Custom commands, agents, and skills for NixOS, Jujutsu, and documentation workflows diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..719a3b1 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,44 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:ohare93/claude-setup:jmo-development-tools", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "9857e679528ade5b7c72d0db5c34caca1b4f6054", + "treeHash": "939f54e2c9ae975ca188dd43cbff09006034250cb08f7b4bd5c07102b88877fc", + "generatedAt": "2025-11-28T10:27:26.101657Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "jmo-development-tools", + "description": "Custom commands, agents, and skills for NixOS, Jujutsu, and documentation workflows" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "5f7126cfe8fda48dbe5dd07c62370d9729f4a7262736139787f791d03c88af16" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "797eb31c8d7df5b2bbb906009fa2bea38ddaa75669e8c4de37f17c4c3a666b66" + }, + { + "path": "skills/SKILL.md", + "sha256": "40fe552b54b81ee245de58774defa6ab708aeeabf202ac530ecaca5c070d18e5" + } + ], + "dirSha256": "939f54e2c9ae975ca188dd43cbff09006034250cb08f7b4bd5c07102b88877fc" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/SKILL.md b/skills/SKILL.md new file mode 100644 index 0000000..6e5e17b --- /dev/null +++ b/skills/SKILL.md @@ -0,0 +1,243 @@ +--- +name: consolidate-branches +description: Consolidate multiple PR branches onto a target branch using jj multi-parent rebase with intelligent AI-powered conflict resolution +--- + +# Consolidate Branches Skill + +**Announce at start**: "I'm using the consolidate-branches skill to merge your PR branches." + +## Overview + +This skill consolidates multiple PR branches onto a target branch using jj's multi-parent rebase with intelligent conflict resolution. The primary use case is when you have multiple feature branches with expected conflicts that need to be merged together. + +**Key principle**: Understand the intent behind each branch's changes and intelligently combine them, not just mechanically merge. + +## Workflow + +### Phase 1: Discovery + +Discover all branches that might need consolidation: + +1. Run `jj git fetch` to sync with remote +2. Display branch structure: + ```bash + JJ_CONFIG= jj log -r "trunk()..@ | trunk() | @.." + ``` +3. Parse the output to identify candidate branches +4. Show branches with metadata: + - Branch name + - Number of commits + - Last modified date (if available) + - Brief description from first/last commit + +**Output**: Present a clear list of discovered branches to the user. + +### Phase 2: Selection + +Let the user choose what to consolidate: + +1. Use AskUserQuestion tool with: + - Multi-select question for branch selection + - Separate question for target branch (suggest "main" as default) + +2. Validate selections: + - At least 2 branches must be selected + - Target branch must exist + - Selected branches should differ from target + +3. Show confirmation summary: + ``` + Consolidating branches [branch-a, branch-b, branch-c] onto main + ``` + +**Ask**: "Ready to proceed with consolidation?" + +### Phase 3: Analysis + +Before merging, understand each branch's intent: + +For each selected branch: + +1. Read commit messages: + ```bash + jj log -r + ``` + +2. Examine changes: + ```bash + jj diff -r + ``` + +3. Categorize the changes: + - What files are affected? + - What type of change? (feature, bugfix, refactor, docs, etc.) + - What is the goal of this branch? + +4. Document intent for later conflict resolution + +**Output**: Create a mental model of what each branch is trying to accomplish. + +### Phase 4: Consolidation + +Perform the multi-parent rebase: + +1. Create new working commit on target: + ```bash + jj new + ``` + +2. Multi-parent rebase to combine all branches: + ```bash + jj rebase -r @ -d -d -d ... + ``` + +3. Check the result: + - Did the rebase succeed? + - Are there conflicts? + +### Phase 5: Intelligent Conflict Resolution + +**This is the core value of the skill.** + +When conflicts occur: + +1. **Identify conflicting files**: + - List all files with conflicts + - Categorize by severity/complexity + +2. **For each conflicting file**: + + a. **Show conflict context**: + - Display the conflicting sections from each branch + - Show surrounding code for context + + b. **Analyze intent**: + - What was each branch trying to accomplish in this file? + - Are the changes complementary or contradictory? + - Can both goals be achieved simultaneously? + + c. **Propose resolution**: + - Draft a merge that preserves both/all intents + - Explain the reasoning behind the resolution + - If intents are contradictory, explain the trade-offs and recommend the best approach + + d. **Apply resolution**: + - Edit the file to implement the proposed merge + - Remove conflict markers + - Ensure code is syntactically correct + + e. **Document resolution**: + - Track what conflict was resolved + - Record why this resolution was chosen + - Note any assumptions made + +3. **Present resolutions to user**: + - Summarize all conflicts found + - Explain how each was resolved + - Show the reasoning behind decisions + - Ask for validation: "Do these conflict resolutions look correct?" + +4. **Iterate if needed**: + - If user requests changes, revise resolutions + - Re-apply and re-validate + +**Key Guidelines**: +- Don't just pick one side arbitrarily +- Look for ways to combine both changes +- Preserve functionality from all branches +- Maintain code quality and consistency +- When uncertain, explain options to user + +### Phase 6: Verification + +Verify all changes from all branches are present: + +1. **Code presence check** for each branch: + ```bash + jj diff -r + ``` + - Compare against final consolidated result + - Verify the changes are present + - Report any missing changes + +2. **Generate summary report**: + - List all branches consolidated + - Show total number of commits included + - List conflicts resolved with explanations + - Display final diff of consolidated changes: + ```bash + jj diff -r ..@ + ``` + +3. **Sanity checks**: + - Are there any remaining conflict markers? + - Does the code appear syntactically correct? + - Are imports/dependencies resolved? + +### Phase 7: Completion + +Leave the workspace ready for user review: + +1. **Summary message**: + ``` + Branch consolidation complete! + + Consolidated branches: [list] + Total commits: [count] + Conflicts resolved: [count] + + The changes are ready for your review. + ``` + +2. **Next steps guidance**: + - "Review the changes with `jj diff`" + - "When satisfied, you can:" + - "Create a commit with `jj commit -m 'your message'`" + - "Create a PR" + - "Make further edits" + - "The workspace is ready for your action" + +3. **Don't auto-commit**: User maintains full control + +## Error Handling + +### If fetch fails +- Report the error +- Ask if user wants to continue without fetching +- Explain risks of stale branch info + +### If no branches found +- Report that no branches were found +- Suggest checking if branches are pushed to remote +- Offer to show current branch status + +### If multi-parent rebase fails +- Report the specific error +- Check if it's due to conflicts or other issues +- Guide user through resolution + +### If conflicts seem irresolvable +- Explain why the conflict is challenging +- Present the conflicting code from each branch +- Ask user for guidance on resolution strategy +- Offer to abort if user prefers manual merge + +## Key Principles + +1. **Understanding over mechanics**: Always analyze intent before merging +2. **Preserve all functionality**: Don't drop changes from any branch +3. **Clear communication**: Explain what you're doing and why +4. **User control**: Present resolutions for validation, don't auto-commit +5. **Safety first**: Verify changes, check for missing code +6. **Helpful guidance**: Provide clear next steps + +## Success Criteria + +The consolidation is successful if: +- All selected branches are merged +- All conflicts are intelligently resolved +- All changes from all branches are present +- Code is syntactically correct +- User understands what was done and why +- Workspace is clean and ready for review