name: create-pr
description: "Create a pull request for the current branch. Handles uncommitted changes, generates a PR title matching the [{modules}] {type}: {description} format enforced by CI, and fills in the PR description template. Trigger: 'create pr', 'open pr', 'submit pr', 'make pr'."
Interaction Principle
Minimize confirmations. The only user confirmation is for uncommitted changes (Step 1.3). Everything after that — drafting, writing file, pushing, creating PR — runs automatically. Tool-level permission prompts (file write, git push) serve as implicit confirmation; do not add extra "are you sure?" pauses on top.
Steps
Step 1: Pre-flight Checks
Identify current branch:
git branch --show-currentIf on
main— stop and ask the user to create a feature branch first.Determine base branch: use
mainunless the user specifies otherwise.Check for uncommitted changes (only confirmation point):
git status git diff --statIf there are staged or unstaged changes, show a summary and ask the user:
"There are uncommitted changes. Commit them before creating the PR?"
- If yes: run
make quality, stage relevant files (skip.env, credentials, large binaries), commit. - If no: proceed with what's already committed.
- If
make qualityfails: stop and report errors.
- If yes: run
Check for existing PR on this branch:
gh pr view --json number,title,body 2>/dev/nullNote the PR number if one exists.
Check commits ahead of base:
git log origin/main..HEAD --onelineIf the branch has no commits ahead of
main, stop — nothing to open a PR for.
Step 2: Analyze Changes (automatic)
Collect the full diff against the base branch:
git diff main...HEAD git log main..HEAD --onelineIdentify affected modules by mapping changed file paths to allowed module names:
Path prefix Module veomni/models/modelveomni/trainer/trainerveomni/data/dataveomni/distributed/distveomni/parallel/parallelveomni/ops/opsveomni/checkpoint/ckptveomni/optim/optimveomni/logging/loggingconfigs/configdocs/docstests/,.github/workflows/cidocker/dockertasks/taskveomni/omni/omni.agents/agentother / mixed miscAllowed modules:
misc,ci,config,docs,data,dist,omni,logging,model,optim,ckpt,release,task,perf,ops,parallel,docker,trainer,agentDetermine change type:
Type When featNew functionality or capability fixBug fix refactorSame behavior, better structure choreMaintenance, cleanup, config changes testTest-only changes
Step 3: Generate Draft File and Push (automatic)
Draft PR title in
[{modules}] {type}: {description}format:- Multiple modules separated by comma:
[model, data] feat: ... - Description: concise, lowercase start, no period, under 60 chars
- Breaking changes: prepend
[BREAKING] - Must pass the regex in
.github/workflows/check_pr_title.yml
- Multiple modules separated by comma:
Draft PR description following
.github/PULL_REQUEST_TEMPLATE.md.Write to
.pr-drafts/(already in.gitignore):mkdir -p .pr-draftsFilename convention:
- Existing PR:
.pr-drafts/<pr-number>.md(e.g..pr-drafts/123.md) - New PR:
.pr-drafts/<branch-name>.md— renamed to PR# after creation.
File format — first line is the PR title, blank line, then the description body:
[model] feat: add support for Qwen4 ### What does this PR do? > Summary here. ### Checklist Before Starting - Search for relative PRs/issues and link here: ... - PR title follows `[{modules}] {type}: {description}` format ### Test > Test description here. ### API and Usage Example > N/A ### Design & Code Changes > - Change 1 > - Change 2 ### Checklist Before Submitting - [ ] Read the [Contribute Guide](https://github.com/ByteDance-Seed/VeOmni/blob/main/CONTRIBUTING.md) - [ ] Applied pre-commit checks - [ ] Added/updated documentation - [ ] Added tests to CI workflow (or explained why not feasible)- Existing PR:
Tell the user the draft file path (so they know where to find it if they want to review later).
Step 4: Push and Create/Update PR (automatic, immediately after Step 3)
Push the branch:
git push -u origin HEADCreate or update:
- New PR (use
--body-fileto avoid shell escaping issues):
After creation, rename the draft file from# Extract body from draft file (everything after the first blank line) tail -n +3 .pr-drafts/<branch-name>.md > /tmp/pr-body.md gh pr create --base <base-branch> --title "<title>" --body-file /tmp/pr-body.md<branch-name>.mdto<pr-number>.md. - Existing PR:
tail -n +3 .pr-drafts/<pr-number>.md > /tmp/pr-body.md gh pr edit <pr-number> --title "<title>" --body-file /tmp/pr-body.md
- New PR (use
Output the PR URL and the draft file path.
Common Pitfalls
- Title format is enforced by CI — a malformed title will block the PR. Always validate against the allowed modules and types listed above.
- Don't force-push unless the user explicitly asks.
- Check for sensitive files before committing — skip
.env, credentials, large binaries and warn the user.