|
| 1 | +--- |
| 2 | +name: creating-a-pr |
| 3 | +description: Steps for opening a pull request in the Fallout repo — picking the right base branch, creating it as a draft, applying the target/vCurrent-or-vNext and changelog-category labels, and handling breaking changes. Trigger whenever you are about to run `gh pr create`, decide a branch/base, write commit messages, or write a PR/issue description. |
| 4 | +--- |
| 5 | + |
| 6 | +Follow this exactly when opening a PR. Don't skip the labelling — it's easy to |
| 7 | +drop because it's just flags on the same `gh pr create` call. |
| 8 | + |
| 9 | +## 0. Working from a fork? |
| 10 | + |
| 11 | +Check `git remote -v`. If it shows both `origin` (your fork) and `upstream` |
| 12 | +(`Fallout-build/Fallout`), branch from `upstream/develop` — never |
| 13 | +`origin/develop`, which can be far behind and cause needless conflicts: |
| 14 | + |
| 15 | +```bash |
| 16 | +git fetch upstream develop |
| 17 | +git switch -c <branch> upstream/develop |
| 18 | +git push -u origin <branch> |
| 19 | +gh pr create --repo Fallout-build/Fallout --draft ... |
| 20 | +``` |
| 21 | + |
| 22 | +Skip this for a plain single-remote clone. |
| 23 | + |
| 24 | +## 1. Create as a draft |
| 25 | + |
| 26 | +`gh pr create --draft` unless the user explicitly asked for ready-for-review. |
| 27 | + |
| 28 | +## 2. Label at creation time, not as a follow-up |
| 29 | + |
| 30 | +- **`target/vCurrent`** (default) or **`target/vNext`** (breaking changes — see |
| 31 | + below) — pass `--label target/vCurrent`. |
| 32 | +- **One changelog-category label** from [`.github/release.yml`](../../../.github/release.yml): |
| 33 | + `enhancement`, `bug`, `security`, `documentation`, `breaking-change`, or |
| 34 | + `skip-changelog` for housekeeping. Don't leave a PR uncategorized — it falls |
| 35 | + through to "Other Changes". |
| 36 | + |
| 37 | +## 3. Breaking change? Do all of this too |
| 38 | + |
| 39 | +A change is breaking if a commit uses the `!` suffix, has a `BREAKING CHANGE:` |
| 40 | +footer, or a reviewer would reasonably flag it (renamed/removed public API, |
| 41 | +package ID change, on-disk format change, CI/CD shape change consumers depend |
| 42 | +on) — except changes to `[Experimental]` surface, which carries no guarantee. |
| 43 | + |
| 44 | +1. `--label target/vNext --label breaking-change` (use `breaking-change` |
| 45 | + instead of `enhancement`/`bug` as the changelog category). |
| 46 | +2. Open the PR body with a `⚠️ Breaking change` callout: name the affected |
| 47 | + surface and the consumer-side impact in one sentence. |
| 48 | +3. **Target `develop`**, never `release/vX.Y` or `main` — confirm the breaking |
| 49 | + surface sits behind `[Experimental("FALLOUT0xx")]` (see the |
| 50 | + `marking-experimental-apis` skill), or, if it can't be gated, on a |
| 51 | + short-lived branch off `develop` held for the next major. Don't bump |
| 52 | + `version.json`'s major — that happens once, at the cut. |
| 53 | +4. Spell out the migration path (one paragraph minimum) — what a consumer |
| 54 | + changes and what they run. There's no `CHANGELOG.md`; the `breaking-change` |
| 55 | + label is what carries this into the generated release notes. |
| 56 | + |
| 57 | +If you only discover the breaking nature mid-review, apply all of this before |
| 58 | +requesting re-review. |
| 59 | + |
| 60 | +## Writing the description |
| 61 | + |
| 62 | +Follow the [plain-english skill](../plain-english/SKILL.md) for the terse, |
| 63 | +scannable shape (issues too) — lead with the point, bullets over prose, link |
| 64 | +don't recap. |
| 65 | + |
| 66 | +## Full policy reference |
| 67 | + |
| 68 | +[references/pr-creation-flow.md](references/pr-creation-flow.md) has the |
| 69 | +complete versioning-policy and milestone-labelling background behind the |
| 70 | +steps above, if you need the "why". |
0 commit comments