name: commit-pr
description: >
Mandatory Codex/Copilot publication adapter for opencode-swarm. Use for every
GitHub issue assignment that results in code changes, commits, pushes, draft PRs,
PR body edits, PR readying, release notes, or CI closeout. Must be loaded before
git push, gh pr create, gh pr edit, or gh pr ready. Routes to the single
canonical source of truth at .claude/skills/commit-pr/SKILL.md.
Commit & PR
Use this skill for Codex-side publication work in opencode-swarm.
Source Of Truth
Read and follow ../../../.claude/skills/commit-pr/SKILL.md in full before committing, pushing, opening, or updating a PR.
That Claude skill remains the repository's canonical publish protocol. This Codex-native skill is the adapter layer: it tells Codex which tools to use, how to handle existing PRs, and how to finish the post-open lifecycle without drifting from the repo contract.
If instructions conflict:
AGENTS.mddocs/engineering-invariants.md../../../.claude/skills/commit-pr/SKILL.md- this file
Codex Execution Rules
- Use the available shell execution tool for
git,gh, build, test, and CI commands. - Use
apply_patchfor manual file edits. - Use
multi_tool_use.parallelfor independent reads, status checks, and non-conflicting repo inspections. - Do not stage
.Codex/, IDE-local files, or unrelated worktree changes. - Do not open a second PR when one already exists for the branch. Update the existing PR instead.
Publish Modes
Infer the mode from the user request and branch state:
new-pr: branch is ready to publish and no PR exists yetpr-followup: a PR already exists and you are addressing review feedback or syncing validationcloseout: a PR already exists and you are updating body text, waiting on CI, marking ready, or confirming merge prerequisites
Required Follow-Through
Existing PR updates
If the branch already has a PR:
- inspect unresolved PR feedback surfaces before updating or readying the PR: review threads/comments, requested-changes reviews, CI/check failures, mergeability/conflicts, and whether check data belongs to the current head SHA
- update the existing PR body instead of creating a new PR
- refresh
## Summary,## Invariant audit, and## Test planwhen validation counts, caveats, or evidence changed - verify the PR still points at the pushed branch head after any force-push
- use
$swarm-pr-feedbackwhen feedback needs fixes before closeout
Draft vs ready
Default behavior:
- open or keep the PR as draft while follow-up edits are still expected, required checks are pending, or known caveats still need explanation
- mark the PR ready only after the body is current and required remote checks are green
If the user explicitly asks for a ready PR sooner, obey that request and document any remaining CI state clearly.
Remote checks are authoritative
When the user asks to open, ship, ready, or close out a PR:
- inspect remote checks with
gh pr view <n> --json statusCheckRollup,...orgh pr checks <n> - verify check data belongs to the current
headRefOidafter every follow-up push - if a required job is
cancelledand downstream jobs areskipped, inspect the run and rerun failed/cancelled jobs - if an obsolete older-head run is already failed or still consuming concurrency, inspect it before cancellation and cancel only when it is no longer the PR head under validation
- wait for required checks to finish when practical
- after conflict resolution, verify GitHub reports both
mergeable: MERGEABLEandmergeStateStatus: CLEAN; local conflict-marker cleanup is not enough, and branch drift must appear in the closure ledger when it affected the PR - when
gh pr checkslooks stale, inspect the workflow run directly withgh run view <run-id> --json headSha,status,conclusion,jobs,url, and keep watching downstream integration/smoke jobs after unit jobs pass - if you edit the PR body after checks are green, expect PR Standards/title checks to rerun and re-check before calling the PR green
- do not call the PR merge-ready while a required check is
cancelled,skipped,in_progress, or otherwise non-green unless the user explicitly accepts that state
Recommended commands:
gh pr view <number> --json body,headRefName,headRefOid,isDraft,mergeable,mergeStateStatus,state,statusCheckRollup,url
gh pr checks <number> --watch --fail-fast
gh run view <run-id> --json headSha,status,conclusion,jobs,url
gh run rerun <run-id> --failed
dist/ is generated output and is not committed (#1047); do not stage it and there is no dist-check drift gate. If package-check fails, inspect the CI log: it is a source / build / package.json#files problem (an incomplete or unbuildable tarball), not generated-file drift. Fix the source or manifest and rerun bun run package:smoke locally.
After a forced install on Windows, EPERM while reading refreshed node_modules
is usually host friction; rerun the exact focused command with approved access
before treating it as a code failure.
Issue comment requirement
If the PR closes an issue:
- confirm the issue comment exists with the PR link, what changed, how to use it, and migration notes
- if the PR merged before the comment was posted, add the missing issue comment immediately
Working Pattern
- Read
AGENTS.md,docs/engineering-invariants.mdas needed, and the canonical Claudecommit-prskill. - Run the required local validation from the canonical skill.
- Stage only intended files.
- Create or update the PR.
- Refresh PR body text if the branch changed after review feedback.
- Watch remote checks to a useful conclusion when the user asked for publication or closeout.
- Verify issue comments, ready/draft state, and merge-readiness claims before finishing.
Clean-Main And CI Reality Checks
When local validation is noisy or host-limited:
- compare suspicious failures against a clean
origin/mainworktree before blaming the branch - document proven pre-existing failures in the PR body
- use remote CI as the cross-platform source of truth for merge-readiness
Final Sanity Check
- one branch, one PR
- PR head matches pushed
HEAD - PR body matches current validation evidence
- issue comment exists when the PR closes an issue
- draft or ready state matches user intent
- required remote checks are green, or any remaining non-green state is explicitly explained