
pr-finalize
by dotnet
.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
Use Cases
Efficient Code Generation
Auto-generate boilerplate code to reduce development time.
Code Review Assistance
Analyze PR changes and suggest improvements.
Refactoring Suggestions
Suggest refactoring options to improve code quality.
FAQ
SKILL.md
name: pr-finalize description: Verifies PR title and description match actual implementation. Works on any PR. Optionally updates agent session markdown if present. metadata: author: dotnet-maui version: "1.0" compatibility: Requires GitHub CLI (gh)
PR Finalize
Ensures PR title and description accurately reflect the implementation for a good commit message.
Works on any PR - Does not require agent involvement or session markdown.
Inputs
| Input | Required | Source |
|---|---|---|
| PR number | Yes | User provides |
| Session markdown | Optional | .github/agent-pr-session/issue-XXXXX.md or pr-XXXXX.md |
Outputs
- Recommended PR title - Platform prefix, behavior-focused
- Recommended PR description - NOTE block + structured content
- Session markdown updates (only if file exists)
Completion Criteria
- Reviewed PR diff to understand actual implementation
- Verified title matches implementation (or recommended fix)
- Verified description matches implementation (or recommended fix)
- Checked for session markdown and updated if needed
When to Use
- Before merging any PR
- "Finalize PR #XXXXX"
- "Check PR description for #XXXXX"
- When implementation changed during review
When NOT to Use
- ❌ For analyzing lessons learned (use
learn-from-prskill instead) - ❌ For writing or running tests (use
write-testsor sandbox) - ❌ For investigating why PR build failed (use
pr-build-status)
Constraints
- Don't change PR title/description directly - Only recommend changes
- Don't modify code - Only verify title/description accuracy
- Match existing style - Follow PR template format
- Preserve user content - Enhance, don't replace custom descriptions
Workflow
Step 1: Get PR State
gh pr view XXXXX --json title,body,files
gh pr diff XXXXX
gh pr view XXXXX --json commits --jq '.commits[].messageHeadline'
Step 2: Analyze Implementation
Read the diff and understand:
- What was actually changed (not what was planned)
- Which platforms are affected
- What the fix does
Step 3: Verify Title
| Requirement | Good | Bad |
|---|---|---|
| Platform prefix (if specific) | [iOS] Fix Shell back button | Fix Shell back button |
| Describes behavior | Fix long-press not triggering events | Fix #23892 |
| No noise prefixes | [iOS] Fix... | [PR agent] Fix... |
Step 4: Verify Description
Must include:
- NOTE block (for testing PR artifacts)
- Description of Change (matches actual implementation)
- Issues Fixed
Should include (for agent context):
- Root cause
- Fix approach
- Key insight
Step 5: Session Markdown (If Exists)
ls .github/agent-pr-session/issue-XXXXX.md .github/agent-pr-session/pr-XXXXX.md 2>/dev/null
If file exists:
- Check if "Selected Fix: [PENDING]" → update with actual fix
- Add "ACTUAL IMPLEMENTED FIX" section if missing
- Document lessons learned
If file doesn't exist: Skip this step.
Step 6: Present Recommendations
Output recommended title and description.
Error Handling
| Situation | Action |
|---|---|
| PR not found | Ask user to verify PR number |
| No session markdown | Proceed - only verify title/description |
| Title already good | Confirm it's good, no change needed |
| Description missing | Generate recommended description |
Output Template
# PR Finalize: #XXXXX
## Title Assessment
**Current:** [current title]
**Recommendation:** [recommended title, or "✅ Current title is good"]
## Description Assessment
**Issues:**
- [issue 1]
- [issue 2]
**Recommended Description:**
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you!
### Description of Change
[Brief summary matching implementation]
**Root cause:** [Why bug occurred]
**Fix:** [What code now does]
### Issues Fixed
Fixes #XXXXX
## Session Markdown
[Updated / No file exists / Already complete]
Title Requirements
- Platform prefix if platform-specific:
[iOS],[Android],[Windows],[MacCatalyst] - Behavior-focused - Describe what changed, not issue number
- Concise - Should fit in commit message subject line
Description Requirements
Required Sections
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you!
### Description of Change
[Must match actual implementation]
### Issues Fixed
Fixes #XXXXX
Recommended Additions (for agent context)
| Element | Purpose |
|---|---|
| Root cause | Why the bug occurred |
| Fix approach | What the code now does |
| Key insight | Non-obvious understanding |
| What to avoid | Patterns that would re-break |
Session Markdown Updates (Optional)
If session markdown exists and is incomplete, add:
## ACTUAL IMPLEMENTED FIX
**Selected Fix:** [Brief description]
**What was implemented:**
1. [What changed]
2. [Key files]
**Key insight:** [Non-obvious understanding]
## Lessons Learned
**What would have helped:**
1. [Suggestion 1]
2. [Suggestion 2]
Common Issues
| Problem | Solution |
|---|---|
| Description doesn't match code | Rewrite from actual diff |
| Missing root cause | Add from issue/analysis |
| References wrong approach | Update to describe final approach |
| "Selected Fix: [PENDING]" | Document actual implementation |
Example
PR #33352 - MacCatalyst crash on window disposal
Step 1: Get PR State
gh pr view 33352 --json title,body,files
# Title: "Fix ObjectDisposedException in PageViewController"
# Files: PageViewController.cs
Step 2: Analyze Implementation
- Fix adds null check for window.Handler before accessing services
- Platform: MacCatalyst specific
- Prevents crash during TraitCollectionDidChange when window disposed
Step 3: Verify Title
- Current: "Fix ObjectDisposedException in PageViewController"
- Assessment: Missing platform prefix
- Recommended:
[MacCatalyst] Fix ObjectDisposedException in PageViewController.TraitCollectionDidChange
Step 4: Verify Description
- Missing NOTE block
- Missing root cause explanation
- Generate recommended description
Output:
# PR Finalize: #33352
## Title Assessment
**Current:** Fix ObjectDisposedException in PageViewController
**Recommendation:** [MacCatalyst] Fix ObjectDisposedException in PageViewController.TraitCollectionDidChange
## Description Assessment
**Issues:**
- Missing NOTE block for testing PR artifacts
- Missing root cause explanation
**Recommended Description:**
[Full description with NOTE block, root cause, fix approach...]
## Session Markdown
Updated - Added "ACTUAL IMPLEMENTED FIX" section
Integration
- pr-finalize → Verify PR ready to merge (this skill)
- learn-from-pr → Extract lessons after finalization
- learn-from-pr agent → Extract lessons AND apply improvements
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 1000以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon

