Claude-skill-registry check-pr-docs
Check pull requests for documentation updates and compliance
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/check-pr-docs" ~/.claude/skills/majiayu000-claude-skill-registry-check-pr-docs && rm -rf "$T"
skills/data/check-pr-docs/SKILL.mdCheck PR Documentation Compliance
Analyzes pull requests from the last week to verify they include appropriate documentation updates. Identifies PRs that may need documentation but don't have it.
Overview
This skill helps ensure PRs include proper documentation by:
- Listing recent PRs (last 7 days) for each repository
- Checking if PRs have documentation updates
- Independently checking wiki commits (may not be mentioned in PR)
- Assessing whether documentation is needed
- Flagging PRs that may need docs tagged
Quick Check
# List PRs from last week for inav firmware cd inav gh pr list --state all --search "created:>=$(date -d '7 days ago' +%Y-%m-%d)" # List PRs from last week for configurator cd inav-configurator gh pr list --state all --search "created:>=$(date -d '7 days ago' +%Y-%m-%d)"
Documentation Check Workflow
Step 1: Get Recent PRs
For each repository (inav, inav-configurator), get PRs from the last week:
# Navigate to repo cd inav # or inav-configurator # List PRs created in last 7 days gh pr list --state all --search "created:>=$(date -d '7 days ago' +%Y-%m-%d)" --json number,title,url,state,author # Get count gh pr list --state all --search "created:>=$(date -d '7 days ago' +%Y-%m-%d)" | wc -l
Step 2: Fetch Recent Wiki Commits
CRITICAL: Check wiki commits independently - authors may update the wiki but not mention it in the PR.
Clone/Update Wiki Repository
# For inav wiki cd /path/to/workspace # Clone wiki if not already present if [ ! -d "inav.wiki" ]; then git clone https://github.com/iNavFlight/inav.wiki.git fi cd inav.wiki git pull origin master # Get recent commits (last 7 days) git log --since="7 days ago" --pretty=format:"%H|%an|%ae|%ai|%s" --all
Parse Wiki Commits
# Get wiki commits with details git log --since="7 days ago" \ --pretty=format:"%H|%an|%ae|%ai|%s" \ --all > /tmp/wiki_commits.txt # Example output format: # abc123|John Doe|john@example.com|2025-12-21 14:30:00|Updated Navigation docs for PR #1234
Extract PR References from Wiki Commits
# Look for PR numbers in wiki commit messages grep -oE "#[0-9]+" /tmp/wiki_commits.txt # Or more detailed: while IFS='|' read -r hash author email date message; do pr_refs=$(echo "$message" | grep -oE "#[0-9]+") if [ -n "$pr_refs" ]; then echo "Wiki commit $hash references: $pr_refs" echo " Author: $author" echo " Date: $date" echo " Message: $message" fi done < /tmp/wiki_commits.txt
Step 3: Check Each PR for Documentation
For each PR, check the following indicators of documentation:
A. Check Files Modified in PR
# Get list of files changed in PR gh pr view <PR_NUMBER> --json files --jq '.files[].path' # Check if any docs/ files were modified gh pr view <PR_NUMBER> --json files --jq '.files[].path' | grep -i "docs/" # Check for README updates gh pr view <PR_NUMBER> --json files --jq '.files[].path' | grep -i "README" # Check for wiki-related files gh pr view <PR_NUMBER> --json files --jq '.files[].path' | grep -i "\.md$"
Documentation indicators (GOOD):
- Files in
directory modifieddocs/ - README files updated
- Markdown files added/updated (may indicate docs)
B. Check PR Description for Links
# Get PR body/description gh pr view <PR_NUMBER> --json body --jq '.body' # Look for PR references in description gh pr view <PR_NUMBER> --json body --jq '.body' | grep -E "#[0-9]+" # Look for wiki links gh pr view <PR_NUMBER> --json body --jq '.body' | grep -iE "wiki|documentation"
Documentation indicators (GOOD):
- Links to other PRs (e.g., "Docs in #1234")
- Links to wiki pages or commits
- Mentions of "documentation", "wiki", "docs updated"
- References like "See inavflight/inav-configurator#5678"
C. Check PR Comments
# Get PR comments gh api repos/inavflight/inav/pulls/<PR_NUMBER>/comments --jq '.[].body' # Or for configurator gh api repos/inavflight/inav-configurator/pulls/<PR_NUMBER>/comments --jq '.[].body' # Search for documentation mentions gh api repos/inavflight/inav/pulls/<PR_NUMBER>/comments --jq '.[].body' | grep -iE "wiki|docs|documentation"
Documentation indicators (GOOD):
- Comments linking to wiki updates
- Comments linking to documentation PRs
- Maintainer confirmation of docs
D. NEW: Cross-Reference with Wiki Commits
Check if wiki was updated by same author around the same time:
# Get PR details PR_NUM=1234 pr_author=$(gh pr view $PR_NUM --json author --jq '.author.login') pr_merged=$(gh pr view $PR_NUM --json mergedAt --jq '.mergedAt') pr_created=$(gh pr view $PR_NUM --json createdAt --jq '.createdAt') # Search wiki commits by author cd inav.wiki git log --since="7 days ago" --author="$pr_author" --pretty=format:"%ai|%s" # Search wiki commits mentioning this PR number git log --since="7 days ago" --grep="#$PR_NUM" --pretty=format:"%H|%an|%ai|%s" # Search wiki commits in time window (±2 days of PR merge) # This catches wiki updates made around the same time as the PR git log --since="$(date -d "$pr_merged - 2 days" +%Y-%m-%d)" \ --until="$(date -d "$pr_merged + 2 days" +%Y-%m-%d)" \ --author="$pr_author" \ --pretty=format:"%ai|%s"
Wiki matching strategies:
- Direct PR reference: Wiki commit message mentions "#1234"
- Author + time match: Same author committed to wiki within ±2 days of PR
- Topic match: Wiki commit message mentions related keywords from PR title
# Example: Check if wiki commit topics match PR pr_title=$(gh pr view $PR_NUM --json title --jq '.title') # Extract key terms from PR title (e.g., "GPS", "navigation", "OSD") key_terms=$(echo "$pr_title" | grep -oE "[A-Z]{2,}|navigation|telemetry|OSD|CLI" | tr '\n' '|' | sed 's/|$//') # Search wiki for those terms cd inav.wiki git log --since="7 days ago" --grep="$key_terms" -i --pretty=format:"%H|%an|%ai|%s"
Step 4: Assess If Documentation Is Needed
If no documentation indicators found, evaluate whether docs are likely needed based on:
Changes Likely Needing Documentation:
Firmware (inav):
- New features or modes
- New CLI commands or settings
- New MSP messages
- Changes to flight behavior
- New sensor support
- Navigation changes
- Changes affecting users (not just internal refactoring)
Configurator:
- New UI features or tabs
- New settings/configuration options
- Changes to user workflows
- New tooltips or help text
- Feature additions visible to users
Changes NOT Needing Documentation:
- Internal refactoring (no user-visible changes)
- Code cleanup or formatting
- Dependency updates (unless user-facing)
- Build system changes (unless affecting developers)
- Test additions/fixes
- Bug fixes (minor, no behavior change)
- CI/workflow updates
Step 5: Check File Contents for Clues
# View the actual diff to understand changes gh pr diff <PR_NUMBER> # Check specific files gh pr diff <PR_NUMBER> | grep "^+" | head -20
Look for:
- New CLI commands (
,cliXXX
)pgRegistry - New MSP messages (
,MSP_
)MSP2_ - New settings structures
- UI component additions
- Feature flag additions
Step 6: Generate Report
Create a summary report with:
## PR Documentation Check - YYYY-MM-DD ### Repository: inav #### PRs with Documentation ✅ - #1234 - "Add new flight mode" - docs/ files modified - #1235 - "Update GPS settings" - links to wiki PR - #1236 - "Add telemetry feature" - wiki commit found (abc123, same author, ±1 day) - #1237 - "Fix OSD layout" - wiki commit references #1237 #### PRs Needing Documentation Review ⚠️ - #1238 - "Add new CLI command 'set gps_mode'" - Reason: New user-facing CLI command, no docs found - Wiki check: No commits by author in time window - Action needed: Tag as "documentation needed"? - #1239 - "Add RTH altitude preset" - Reason: New user-visible feature, no docs found - Wiki check: No related wiki commits found - Action needed: Tag as "documentation needed"? #### PRs Not Needing Documentation ℹ️ - #1240 - "Refactor PID controller code" - Internal refactoring only - #1241 - "Update GitHub Actions workflow" - CI changes only - #1242 - "Fix typo in comment" - Code comment fix ### Repository: inav-configurator (Similar structure) ### Wiki Commits Summary **Total wiki commits (last 7 days):** 12 **Commits with PR references:** - abc123 - "Updated Navigation.md for #1234" (matched to PR #1234 ✅) - def456 - "OSD documentation #1237" (matched to PR #1237 ✅) **Commits without PR references (by author/time):** - ghi789 - "Updated telemetry docs" by user123, 2025-12-22 (matched to PR #1236 by author/time ✅) **Unmatched wiki commits:** - jkl012 - "Fix typo in GPS.md" (minor fix, no PR needed)
Complete Workflow Script
Here's a complete workflow you can follow:
#!/bin/bash # Check PR documentation for last week echo "=== PR Documentation Check ===" echo "Date: $(date)" echo "" # Step 1: Update wiki repositories echo "=== Updating Wiki Repositories ===" for wiki_repo in inav.wiki inav-configurator.wiki; do if [ -d "$wiki_repo" ]; then cd "$wiki_repo" git pull origin master cd .. else if [ "$wiki_repo" = "inav.wiki" ]; then git clone https://github.com/iNavFlight/inav.wiki.git elif [ "$wiki_repo" = "inav-configurator.wiki" ]; then git clone https://github.com/iNavFlight/inav-configurator.wiki.git fi fi done echo "" # Step 2: Get wiki commits echo "=== Recent Wiki Commits ===" cd inav.wiki echo "## inav.wiki commits (last 7 days):" git log --since="7 days ago" --pretty=format:"%H|%an|%ai|%s" --all > /tmp/inav_wiki_commits.txt cat /tmp/inav_wiki_commits.txt echo "" cd .. cd inav-configurator.wiki echo "## inav-configurator.wiki commits (last 7 days):" git log --since="7 days ago" --pretty=format:"%H|%an|%ai|%s" --all > /tmp/configurator_wiki_commits.txt cat /tmp/configurator_wiki_commits.txt echo "" cd .. # Step 3: Check PRs in each repo for repo in inav inav-configurator; do echo "### Repository: $repo" echo "" cd "$repo" # Determine wiki file if [ "$repo" = "inav" ]; then wiki_commits="/tmp/inav_wiki_commits.txt" else wiki_commits="/tmp/configurator_wiki_commits.txt" fi # Get PRs from last week prs=$(gh pr list --state all --search "created:>=$(date -d '7 days ago' +%Y-%m-%d)" --json number --jq '.[].number') if [ -z "$prs" ]; then echo "No PRs in last 7 days" echo "" cd .. continue fi for pr in $prs; do echo "#### PR #$pr" # Get PR details pr_data=$(gh pr view $pr --json title,author,mergedAt,createdAt,state) title=$(echo "$pr_data" | jq -r '.title') author=$(echo "$pr_data" | jq -r '.author.login') merged=$(echo "$pr_data" | jq -r '.mergedAt') created=$(echo "$pr_data" | jq -r '.createdAt') state=$(echo "$pr_data" | jq -r '.state') echo "Title: $title" echo "Author: $author" echo "State: $state" has_docs=false # Check for docs files in PR docs_files=$(gh pr view $pr --json files --jq '.files[].path' | grep -iE "docs/|README|\.md$" || true) if [ -n "$docs_files" ]; then echo "✅ Has documentation files in PR" echo "$docs_files" has_docs=true fi # Check PR body for references body=$(gh pr view $pr --json body --jq '.body') wiki_refs=$(echo "$body" | grep -iE "wiki|#[0-9]+|documentation" || true) if [ -n "$wiki_refs" ]; then echo "✅ Has documentation references in PR description" has_docs=true fi # Check wiki commits for PR reference wiki_pr_refs=$(grep "#$pr" "$wiki_commits" || true) if [ -n "$wiki_pr_refs" ]; then echo "✅ Wiki commit references this PR:" echo "$wiki_pr_refs" has_docs=true fi # Check wiki commits by same author in time window if [ "$state" = "MERGED" ] && [ "$merged" != "null" ]; then # Check ±2 days from merge wiki_author_commits=$(grep "$author" "$wiki_commits" || true) if [ -n "$wiki_author_commits" ]; then echo "✅ Wiki commits by same author (check time proximity):" echo "$wiki_author_commits" has_docs=true fi fi if [ "$has_docs" = false ]; then echo "⚠️ No documentation found - needs review" fi echo "" done cd .. done echo "=== Check Complete ==="
Wiki Commit Matching Logic
Priority 1: Direct PR Reference
# Wiki commit message contains "#1234" grep "#$PR_NUM" /tmp/wiki_commits.txt
Confidence: HIGH - Explicit link
Priority 2: Author + Time Window
# Same author, within ±2 days of PR merge pr_merge_date="2025-12-22" author="john_doe" # Check if any commits match git log --since="$(date -d "$pr_merge_date - 2 days" +%Y-%m-%d)" \ --until="$(date -d "$pr_merge_date + 2 days" +%Y-%m-%d)" \ --author="$author" \ --pretty=format:"%ai|%s"
Confidence: MEDIUM - Likely related if timing matches
Priority 3: Topic/Keyword Match
# PR title: "Add GPS altitude hold feature" # Look for wiki commits mentioning "GPS" or "altitude" pr_title="Add GPS altitude hold feature" keywords=$(echo "$pr_title" | grep -oE "[A-Za-z]{3,}" | sort -u | tr '\n' '|' | sed 's/|$//') git log --since="7 days ago" \ --grep="$keywords" -i \ --pretty=format:"%H|%an|%ai|%s"
Confidence: LOW - May be coincidental, needs human review
Implementation Notes
Wiki Repository Locations
# Clone wiki repos if not present git clone https://github.com/iNavFlight/inav.wiki.git git clone https://github.com/iNavFlight/inav-configurator.wiki.git # Standard locations in workspace ~/Documents/planes/inavflight/inav.wiki/ ~/Documents/planes/inavflight/inav-configurator.wiki/
Date Calculation
Different systems may need different date commands:
# Linux date -d '7 days ago' +%Y-%m-%d date -d "$some_date - 2 days" +%Y-%m-%d # macOS date -v-7d +%Y-%m-%d date -j -f "%Y-%m-%d" "$some_date" -v-2d +%Y-%m-%d
Handling Email vs. GitHub Username
Wiki commits may use email addresses while GitHub PRs use usernames:
# Get both from PR gh pr view $PR_NUM --json author --jq '.author.login' # GitHub username gh pr view $PR_NUM --json commits --jq '.commits[0].commit.author.email' # Email from commit # Search wiki by either git log --author="username_or_email"
Common Scenarios
Scenario 1: PR with docs/ files
PR #1234 - "Add GPS altitude hold" Files changed: - src/main/navigation/navigation_pos_estimator.c - docs/Navigation.md ✅ Result: ✅ Documentation included Action: None needed
Scenario 2: PR with Wiki commit reference
PR #1235 - "Add new telemetry fields" Files changed: - src/main/telemetry/crsf.c Wiki commits: - abc123: "Updated Telemetry.md for #1235" ✅ Result: ✅ Wiki updated and linked Action: None needed
Scenario 3: PR with Wiki commit by author (no reference)
PR #1236 - "Add OSD element" by user_alice Merged: 2025-12-22 Files changed: - src/main/io/osd.c Wiki commits: - def456: "Updated OSD.md" by user_alice, 2025-12-22 ✅ Result: ✅ Wiki likely updated (author/time match) Action: Verify this is the related update
Scenario 4: Feature PR without any docs
PR #1237 - "Add new CLI command" Files changed: - src/main/cli/settings.c No docs/ changes, no wiki references Wiki commits: None by author in time window ⚠️ Result: ⚠️ Likely needs documentation Action: Ask user to tag as "documentation needed"
Scenario 5: Refactoring PR
PR #1238 - "Refactor PID loop structure" Files changed: - src/main/flight/pid.c (internal refactoring) No user-visible changes ℹ️ Result: ℹ️ No documentation needed Action: Note as internal change only
Tips for Effective Checking
- Always check wiki independently - Don't rely on PR mentions
- Match by author + time - Often more reliable than PR references
- Read PR titles carefully - Often indicate if user-facing
- Check PR labels - May already be tagged
- Look at file paths -
often user-facing,src/main/
usually notlib/ - Search for keywords - "CLI", "MSP", "OSD", "setting" indicate user features
- Check wiki commit dates - May be before OR after PR merge
Output Format
Generate a structured report for the user:
# PR Documentation Check Report **Date:** 2025-12-28 **Period:** Last 7 days ## Summary - Total PRs checked: 15 - PRs with documentation: 8 ✅ - With docs/ files: 3 - With PR-referenced wiki commits: 2 - With author-matched wiki commits: 3 - PRs needing doc review: 4 ⚠️ - PRs not needing docs: 3 ℹ️ ## Wiki Activity Summary - Total wiki commits: 12 - Wiki commits with PR refs: 5 (matched to PRs) - Wiki commits matched by author/time: 3 - Unmatched wiki commits: 4 (typo fixes, minor updates) ## Detailed Findings [Details for each PR category] ## Recommended Actions [List of PRs to tag, with reasons]
Related Skills
- pr-review - Review PR code and comments
- git-workflow - Manage git operations for PRs
- wiki-search - Search wiki for related documentation
- check-builds - Verify PR builds pass
Note: This is a manager skill for tracking documentation compliance. The manager should run this periodically to ensure PRs include appropriate documentation.