--- name: meta-pr-creation description: How an agent authors branches, commits, and pull requests on cipherstash/stack — naming, signed commits, the changeset/skills/meta-file checklist, and PR body structure with dumbed-down wording. Use when committing work or opening/updating a PR. --- # Authoring PRs as an agent Internal skill — lives in `.claude/skills/` on purpose. `skills/` ships to customers inside the `stash` tarball; this must not. ## Branch and commits - Branch names are type-prefixed slugs: `docs/skill-psl-functional-indexes`, `fix/…`, `feat/…`, `chore/…`. Never commit to `main`. - Commit subjects are conventional: `type(scope): imperative summary` — `docs(skills): …`, `fix(stack-prisma): …`. The body explains **why** and the mechanism, not a list of what changed (the diff shows that). Reference the GitHub issue the commit serves. - **Commits must be signed.** `commit.gpgsign` is on, but verify before pushing: ```bash git log --format='%h %G? %s' main..HEAD # G = signed, N = unsigned ``` An unsigned commit (`N`) in the stack: `git rebase --force-rebase main` re-commits everything signed, then `git push --force-with-lease`. Always `--force-with-lease`, never bare `--force`. ## Before opening the PR The authoritative checklist is `AGENTS.md` § "Adding Features Safely" — read it, don't work from memory. The three most-missed items: 1. **Changeset** — required when the change touches a published package's surface, *including* a `skills/`-only change (those ship in the `stash` tarball, so they need a `stash` patch changeset). A `.claude/`-only change is internal: no changeset. 2. **Skills check** — a change to a public API, CLI surface, or user-facing workflow must fix the affected `skills/*/SKILL.md` in the same PR (package→skill map in `AGENTS.md`). 3. **Meta files** — adding/removing/renaming a package, example, skill, or subpath export must update `AGENTS.md` Repository Layout and `SECURITY.md`. Then run: `pnpm run code:fix`, `pnpm --filter build`, `pnpm --filter test`. ## PR body Same wording rule as [meta-issue-creation](../meta-issue-creation/SKILL.md): **dumbed down** — assume the reviewer is new to CipherStash, stack, and EQL. Define product terms at first use; say what breaks or improves in the user's world, not just the code's. Sections, in order: - **Summary** — what and why, two or three plain sentences. Lead with the user-visible effect. - **Changes** — grouped by area, one line each. - **Verification** — exactly what was run and what it showed. Honest: a failing or skipped check is stated, not omitted. "Verified against the 0.17 dist" beats "should work". - **Related** — `Closes #N` / `Refs #N` for the GitHub issues this serves; cross-repo refs in full `owner/repo#N` form. - **Review notes** *(optional)* — where to look first, and anything deliberately deferred with the reason. Reference wording traps (same as issues): - `#N` **only** as a real GitHub issue/PR reference — GitHub autolinks every `#N`, so "option #2" mints a bogus link. Write "option 2". - **Never** reference internal Linear issues (`CIP-…`) in PRs, commits, or comments — GitHub is public. ## Mechanics - **Always open as a draft**: `gh pr create --draft --title '…' --body '…'` (title follows the commit-subject convention). Mark it ready for review only when the user says so — either ask, or rely on an explicit "open it ready" / "mark it ready" from them. `gh pr ready ` flips it. - Force-pushing a branch with an open PR is fine (rebases, re-signs) — but say so in a PR comment when the rewrite changes more than commit hashes. - Don't merge, close, or mark ready-for-review without being asked.