create-pr
Create a PR / MR
Platform-aware: This skill adapts to GitHub, Forgejo, or local tk workflows. See
skills/obsidian-plan-wiki/references/platform-detection.mdfor detection rules. For local tk, this skill becomes "prepare for merge" — no remote PR needed.
⚠️ MANDATORY: Issue Linking
Every PR/MR MUST link to related issues and use closing keywords.
- PRs/MRs without issue links are incomplete
- GitHub / Forgejo: Use
Closes #XorFixes #Xto auto-close issues on merge - Local tk: Use
tk dep/tk linkto connect tickets - Reference ALL related issues, even if not closing them
Instructions
Step 1: Identify Related Issues
Find ALL issues this PR/MR addresses:
- Issues explicitly being fixed
- Issues partially addressed
- Related issues for context
GitHub:
git branch --show-current
gh issue list --search "relevant keywords"
gh issue view <number>
Forgejo:
git branch --show-current
# Use tea CLI or Forgejo API
tea issue list
tea issue view <number>
Local tk:
git branch --show-current
tk ls
tk show <id>
Step 2: Gather Context
# See what changed (platform-agnostic)
git log main..HEAD --oneline
git diff main..HEAD --stat
# Get commit messages for context
git log main..HEAD --format="%s%n%b"
Step 3: Create PR/MR with Issue Links
Use the writing-clearly-and-concisely skill for clear writing, then follow pr_guide.
IMPORTANT: Do NOT include "Generated with Claude Code" (or any AI tool) or similar tool attribution footers in PR/MR descriptions.
GitHub:
gh pr create --title "[type]: [emoji] [description]" --body "$(cat <<'EOF'
[Two-sentence summary of what and why]
## Key Changes
- [Change 1]
- [Change 2]
## Related Issues
**Closes:**
- Closes #X - [brief description of what's fixed]
- Closes #Y - [brief description]
**Related (not closing):**
- Related to #Z - [why related]
- See also #W - [context]
## Testing
- [How it was tested]
## Files Changed
- [List key files]
EOF
)"
Forgejo:
# Use tea CLI or Forgejo API
tea pr create --title "[type]: [emoji] [description]" --description "..."
# Body format identical to GitHub — Forgejo recognizes the same closing keywords
Local tk:
# No remote PR needed — link tickets and prepare for local merge
tk link <task-id> <related-id>
tk dep <child-id> <parent-id>
tk add-note <task-id> "Ready to merge. Key changes: [summary]"
Issue Linking Keywords
GitHub and Forgejo recognize these keywords to auto-close issues on merge:
| Keyword | Example | Effect |
|---|---|---|
Closes |
Closes #123 |
Closes issue when PR/MR merges |
Fixes |
Fixes #123 |
Closes issue when PR/MR merges |
Resolves |
Resolves #123 |
Closes issue when PR/MR merges |
Use format: Closes #X - brief description
Local tk: Use tk dep <child> <parent> or tk link <a> <b> to connect tickets instead.
Step 4: Verify Issue Links
After creating PR/MR:
GitHub:
gh pr view <number> --json closingIssuesReferences
gh issue view <number>
Forgejo:
# Check PR body for Closes #X keywords
tea pr view <number>
Local tk:
# Verify ticket links/deps
tk show <id>
PR/MR Description Template
[Two-sentence summary: what changed and why it was needed]
## Key Changes
- [Most important change]
- [Second important change]
- [Third important change]
## Related Issues
**Closes:**
- Closes #X - [what requirement this addresses]
- Fixes #Y - [what bug this fixes]
**Related:**
- Related to #Z - [provides context but doesn't close]
## Testing
- [Manual testing performed]
- [Automated tests added/passing]
## Architectural Impact
[If significant: explain system-wide effects]
## Files Changed
- `path/to/file1.ts` - [what changed]
- `path/to/file2.ts` - [what changed]
Local tk note: When working locally, include this summary as a
tk add-noteon the task ticket instead of a PR body.
Anti-Patterns
❌ WRONG (any platform):
Creating a PR/MR with no description: --body "Fixed the thing"
❌ WRONG:
"Related: #123" (no closing keyword, issue won't close)
❌ WRONG:
No mention of any issues at all
✅ CORRECT (GitHub):
gh pr create --title "fix: 🔧 Resolve auth token expiration" --body "
Fixes session timeout by implementing token refresh.
## Related Issues
- Closes #123 - Auth token expires incorrectly
- Closes #124 - Users logged out unexpectedly
- Related to #100 - Auth system overhaul (partial)
"
✅ CORRECT (Forgejo):
tea pr create --title "fix: 🔧 Resolve auth token expiration" --description "..."
# Same body format — Forgejo uses same closing keywords
✅ CORRECT (Local tk):
tk add-note <task-id> "Ready to merge: fixes auth token expiration"
tk link <task-id> <related-id>
Mermaid Diagrams in PRs/MRs
Use Mermaid diagrams to visualize changes, flows, and architectural impacts.
GitHub and Forgejo render Mermaid natively. Include diagrams when:
- Showing before/after state changes
- Illustrating new data flows
- Explaining component interactions
- Depicting architectural changes
Local tk: Skip Mermaid diagrams — ticket notes are plain text.
When to Include Diagrams
| PR/MR Type | Diagram Use |
|---|---|
| Bug fix | Before/after flow showing fix |
| New feature | User journey or data flow |
| Refactor | Component dependency changes |
| API changes | Request/response sequence |
Example: PR/MR with Diagram
## Key Changes
Added token refresh flow when session expires.
### New Authentication Flow
```mermaid
sequenceDiagram
participant C as Client
participant A as Auth Service
participant D as Database
C->>A: Request with expired token
A-->>C: 401 Token Expired
C->>A: POST /refresh with refresh_token
A->>D: Validate refresh token
D-->>A: Token valid
A-->>C: New access token
C->>A: Retry original request
A-->>C: 200 Success
```
## Related Issues
- Closes #123 - Token expiration handling
Diagram Types for PRs/MRs
## Flow changes: flowchart
## API interactions: sequenceDiagram
## State machines: stateDiagram-v2
## Data models: erDiagram
Tips:
- Keep diagrams focused (5-10 nodes)
- Show the change, not entire system
- Before/after pairs are powerful
- Embed in PR/MR body, not as links
Quick Reference
GitHub
- Find issues:
gh issue list --search "keywords" - Create PR:
gh pr create --title "..." --body "..." - Link issues:
Closes #X,Fixes #Xin body - Verify:
gh pr view --json closingIssuesReferences
Forgejo
- Find issues:
tea issue listor Forgejo API - Create MR:
tea pr create --title "..." --description "..." - Link issues:
Closes #X,Fixes #Xin body - Verify:
tea pr view <N>— check body for keywords
Local tk
- Find tasks:
tk ls - No PR needed: prepare for local merge
- Link tasks:
tk dep <child> <parent>/tk link <a> <b> - Note summary:
tk add-note <id> "Ready to merge: [summary]"
All platforms: Add Mermaid diagrams for complex changes (GitHub/Forgejo only)