بنقرة واحدة
oh-join
Resolve multi-dependency fan-in by merging dependency PRs into a common base and updating issue dependencies
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Resolve multi-dependency fan-in by merging dependency PRs into a common base and updating issue dependencies
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Do the work. Pre-flight, build, detect drift, salvage if needed. Use when you have a clear aim and are ready to implement.
Review and merge open PRs for GitHub issues as a cohesive batch
Claim a GitHub issue, create its branch and draft PR before implementation, execute the work in isolation, and hand the completed draft to RNA's full ship gate.
Check work and detect drift before committing. A second opinion that catches misalignment early. Use at natural pause points, before PRs, or when something feels off.
Agent-led PR/working-tree review triage. Start from the diff, add RNA graph/business context only where it changes review decisions, and state when raw git diff is enough.
Install and configure the Repo-Native Alignment (RNA) MCP server. Downloads the binary, configures the MCP server, pre-warms the code index, and updates AGENTS.md with tool guidance.
| name | oh-join |
| description | Resolve multi-dependency fan-in by merging dependency PRs into a common base and updating issue dependencies |
Use this skill when an issue has 2+ open dependencies and scheduler cannot auto-stack because there is no single base branch.
/oh-join <issue-number>
<issue-number>: target GitHub issue (for example 1178 or #1178)For target issue #X:
Depends on: dependenciesLoad issue and dependencies
gh issue view <issue-number> --json number,title,body,state,url
Depends on: lines.blocked (not a join case).Discover open PRs for dependency issues
gh pr list --state open --json number,title,headRefName,baseRefName,body,url
issue/<N> or issue-<N>Closes #N / Fixes #N / Resolves #Nblocked and list missing deps.Determine common base branch
baseRefName across dependency PRs.blocked and report conflicting bases.Readiness checks for each dependency PR For each dep PR:
gh pr checks <pr-number> --fail-on-error
gh pr view <pr-number> --json reviewDecision,isDraft,mergeable
CHANGES_REQUESTED/ship pipeline must be evidenced on the final commitAPPROVE from a fresh, separate repo-local /review sub-agent for the exact final commitblocked and report specific PR reasons.Merge dependency PRs in deterministic order and close their issues
Sort by dependency issue number ascending.
If either final-diff gate above is missing, delegate that PR to canonical /ship and wait; never call gh pr merge directly.
For each dependency pair (issue #D, PR #P) in order:
gh pr merge <pr-number> --squash
gh issue close <dep-issue-number> --comment "Closed via oh-join after merging PR #<pr-number> into <base-branch>."
Why explicit close: PRs merged into non-default branches do NOT auto-close issues, even with Closes #N.
On failure:
signal_completion(status: "error", error: "...")Update target issue dependencies
Re-read target issue body.
Rewrite Depends on: to one explicit scheduler-readable base dependency.
Required: common base branch MUST be issue/<B> or issue-<B>; then set: **Depends on:** #<B>
If common base is not an issue branch (for example main/master), stop with blocked and do NOT rewrite dependencies to none.
Do NOT leave merged dependency references in strikethrough (~~#N~~) form — remove them completely.
Append/update a machine section:
<!-- oh-join -->
Joined deps: #A (PR #PA), #B (PR #PB)
Base branch: <branch>
Updated: <ISO timestamp>
Write back:
gh issue edit <issue-number> --body-file <temp-file>
Completion signaling
Success:
signal_completion(status: "success", message: "Merged dep PRs #... into <base>; updated issue #<issue-number> dependencies")
Blocked:
signal_completion(status: "blocked", blocker: "<reason>")
Error:
signal_completion(status: "error", error: "<reason>")
Depends on: #<base-issue> when base is an issue branch.You MUST call signal_completion as your final action.
If the tool is unavailable, end with one line:
COMPLETION: status=success message=<...>COMPLETION: status=blocked blocker=<...>COMPLETION: status=error error=<...>