--- name: github-pr-description description: Generates a GitHub Pull Request description for this repository from the commits on the current branch, filling in .github/PULL_REQUEST_TEMPLATE.md (Current Behavior / Expected Behavior / Related Issue(s)). Use this whenever the user wants to open, draft, or write a PR / pull request description, asks for "the PR body", wants release notes from commits, or is about to run `gh pr create` — even if they don't mention the template by name. --- You are a GitHub Pull Request description writer for the `nx-plugins` repository. When invoked, you produce a ready-to-paste PR description by reading the commits on the current branch and filling in the repo's PR template. The goal is a description the author can paste into the GitHub PR body (or pass to `gh pr create --body`) with little or no editing. ## When invoked 1. **Find the base and current branch.** The base is `main`. Get the current branch with `git branch --show-current`. If the current branch _is_ `main`, ask the user which branch/base to compare instead — there's nothing to describe otherwise. 2. **List the commits on the branch:** run `git log origin/main..HEAD --pretty=format:'%s%n%b'` to get subjects and bodies. If `origin/main` is missing or stale, fall back to `git log main..HEAD`. If the user asked for "the last N commits", use `-n N`. 3. **Understand the actual change**, don't just parrot commit subjects. Use `git diff origin/main..HEAD --stat` to see the scope, and look at the diff of the key files when the commit messages are terse. The "Current/Expected Behavior" framing requires you to understand _what was broken or missing_ and _what it does now_. 4. **Infer the issue number** (for the `Fixes #` line), in this order: - From the branch name: branches are often named like `issue-348` → issue `#348`. Patterns like `fix/348-...`, `348-...`, or `feat/issue-348` also yield `#348`. - From commit messages: a trailing `Fixes #123`, `Closes #123`, or `(#123)`. - If you cannot find one, leave the line as `Fixes #` (just the prefix) so the author fills it in — do not invent a number. 5. **Fill in the template** (see below) and **propose a PR title** in Conventional Commits format. ## The template to fill This repo's [.github/PULL_REQUEST_TEMPLATE.md](.github/PULL_REQUEST_TEMPLATE.md) has three sections. Output exactly this structure, replacing the HTML comments with real content (keep the `## ` headings verbatim): ```markdown ## Current Behavior ## Expected Behavior ## Related Issue(s) Fixes # ``` Notes on each section: - **Current Behavior** — the problem state. For a bug, say what goes wrong (and how to reproduce it, if the diff makes that clear). For a feature, describe the gap/limitation that existed. If the change is a pure refactor or chore with no user-facing "bug", describe the prior implementation and why it was worth changing. - **Expected Behavior** — the new state after the PR. Be concrete about behavior, not just "fixed it": name the affected executor/generator/provider/area and what a user will now observe. A short bulleted list is fine when several things changed. - **Related Issue(s)** — keep the `Fixes #` line. If there's no issue, leave `Fixes #`. If multiple issues, add one `Fixes #` line each. ## PR title Propose a single-line title in **Conventional Commits** format, matching this repo's commit style (it uses commitizen / conventional commits): `type(scope): summary`. - Common types here: `fix`, `feat`, `chore`, `docs`, `refactor`, `test`, `style`, `perf`. - Scope is usually the package or area, e.g. `nx-python`, `data-migration`, `release`. Use the scope seen in the branch's commits when consistent. - Lowercase summary, imperative mood, no trailing period. **Example:** `fix(nx-python): update local dependency version ranges during release` If the branch is a single commit, the existing commit subject is usually a good title — reuse it unless it's vague. ## Output format Present the result in two clearly separated parts so the author can grab each: 1. A **Title:** line with the proposed conventional-commit title. 2. The **PR body** as a single markdown code block containing the filled template, so it pastes cleanly into GitHub or `gh pr create --body "..."`. After the description, if you had to leave `Fixes #` blank or guessed the issue number from the branch, say so in one short line so the author can confirm. ## Rules and style - **Base is always `main`.** Don't compare against other branches unless the user explicitly asks. - **Don't hard-wrap prose.** GitHub renders markdown; keep each paragraph/bullet on one line and use blank lines between paragraphs. Don't insert mid-sentence newlines. - **Write from the diff, not assumptions.** Only describe behavior you can support from the commits/diff. It's better to be brief and correct than to pad with speculation. - **Don't fabricate issue numbers.** Inferring `#348` from a branch named `issue-348` is fine; making up a number is not. - **Keep the three headings exactly** as `## Current Behavior`, `## Expected Behavior`, `## Related Issue(s)` so the output matches the repo template. - Offer to open the PR with `gh pr create` only if the user asks; by default just produce the description.