From oadp-rebase
Detailed guide for verifying that downstream carry commits are preserved after rebase
How this skill is triggered — by the user, by Claude, or both
Slash command
/oadp-rebase:verify-commitsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides detailed instructions for the most critical safety check in the OADP rebase process: verifying that all downstream `UPSTREAM: <carry>` commits are preserved.
This skill provides detailed instructions for the most critical safety check in the OADP rebase process: verifying that all downstream UPSTREAM: <carry> commits are preserved.
In past rebases, downstream patches have been silently dropped, leading to:
The root causes of dropped commits include:
Before or immediately after a rebase, collect all carry commits from the destination branch:
# Using gh CLI
gh api repos/{org}/{repo}/commits?sha={branch}&per_page=100 \
--jq '.[].commit.message' | grep "^UPSTREAM: <carry>"
# Using git (if you have the repo cloned)
git fetch origin {branch}
git log --oneline --grep="UPSTREAM: <carry>" origin/{branch}
Save this list - you will compare against it.
# From the PR
gh pr view {pr-number} --repo {org}/{repo} --json commits \
--jq '.commits[].messageHeadline' | grep "UPSTREAM: <carry>"
# From the rebase branch directly
git fetch oadp-rebasebot rebase-bot-{branch}
git log --oneline --grep="UPSTREAM: <carry>" FETCH_HEAD
For each expected carry commit, verify it exists in the actual list:
Check that these files exist in the rebase branch (if they existed in dest):
# Common downstream-only files
git ls-tree --name-only -r FETCH_HEAD | grep -E "(Dockerfile\.ubi|konflux\.Dockerfile|release-announcement|\.tekton/)"
Files to check:
Dockerfile.ubi or Dockerfile (downstream build)konflux.Dockerfile (Konflux CI build)release-announcement (release notes template).tekton/ directory (Konflux pipeline definitions)Check that UPSTREAM: <drop> commits exist (proves hooks ran successfully):
git log --oneline --grep="UPSTREAM: <drop>" FETCH_HEAD
Expected drop commits vary by repo but typically include:
UPSTREAM: <drop>: go mod tidy (or similar)UPSTREAM: <drop>: normalize DockerfilesUPSTREAM: <drop>: update velero go.mod replace (for repos with velero dependency)When rebasebot detects "dest already contains source" (upstream tag unchanged), it may use an existing stale rebase branch as the starting point for hooks instead of the current dest branch. If the stale branch predates the addition of downstream files, those files won't be present.
# Check the PR diff for deleted downstream files
gh pr diff {pr-number} --repo {org}/{repo} | grep "^-" | head -50
# Check if downstream files exist in the PR branch
gh api repos/{org}/{repo}/git/trees/{pr-branch-sha}?recursive=1 \
--jq '.tree[].path' | grep -E "(konflux|Dockerfile|tekton)"
See the manual-intervention skill for detailed steps to fix this.
Use this checklist for every rebase PR:
UPSTREAM: <carry> commits from dest branch are present in rebase PRUPSTREAM: <drop> commits are presentGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub migtools/oadp-rebase-ai-helpers --plugin oadp-rebase