--- name: pull-request description: "PR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly. Invoke before opening a PR or when touching an existing PR's release docs." metadata: copyright: Copyright Cloud Posse, LLC 2026 version: "1.0.0" --- # Pull Request Preparation (Atmos) Use this skill **every time you open or update a PR**. It encodes three policies that the Atmos repo enforces via CI and that the team has been burned by repeatedly: 1. **Every PR needs exactly one semver label.** Unlabeled PRs fail the `PR Semver Labels` CI check. 2. **`minor` and `major` PRs require a blog post AND a roadmap update.** The `Check for changelog and roadmap updates` workflow gates merging on both. 3. **`featured[]` in the roadmap is curated.** Never auto-promote a shipped milestone into `featured[]` — only the user decides. If you violate any of these, CI fails and the PR can't merge. Follow this skill across both phases: complete the **pre-push checklist** before `git push`, then immediately work through the **post-push / PR checklist** (open the PR, apply the label, monitor CI). ## The label decision tree The Atmos repo has four mutually exclusive release labels (plus other category labels that don't affect release docs): | Label | When | CI requires blog + roadmap? | | ------------ | ----------------------------------------------------------------------------------------------------- | --------------------------- | | `no-release` | Internal refactor, new internal helper, dependency bump with zero user-visible behavior, docs fixes | No | | `patch` | Bug fix, performance fix, error-message improvement, small UX polish — user-visible but not a feature | No | | `minor` | New user-visible feature, new flag, new command, new config option, default flip that users see | **YES** | | `major` | Breaking change: removed/renamed flag, schema migration, CLI behavior reversal | **YES** | ### How to choose Ask, in order: 1. **Would a user upgrading Atmos see ANY visible change?** Behavior, output, errors, performance, new flags, new commands, removed flags, changed defaults? If no, use `no-release`. This is the most common case for foundation/plumbing PRs. 2. **Is this a breaking change?** Removed flags, renamed flags, changed semantics, schema bumps that require user action? Use `major`. Document the migration in the blog post. 3. **Is this net-new functionality?** New command, new flag, new config option that users will adopt? Use `minor`. Write a blog post. 4. **Anything else user-visible** (bug fix, UX polish, error-message rewrite, output formatting): use `patch`. No blog post required. **Common mistake:** labeling a plumbing PR as `minor` because it's part of a larger feature. The label is per-PR, not per-feature. If a five-PR stack adds one user-visible feature, only the **final** PR that wires it up gets `minor` — the four foundation PRs are `no-release`. **Another common mistake:** flipping a default value and labeling `patch` because "it's just a default." If users see different behavior on upgrade, that's `minor` (or `major` if it could break their workflow). ### Apply the label as the first action After opening the PR, immediately: ```bash gh pr edit --add-label