Agent Skillsmakeplane/plane › release-notes

release-notes

GitHub

解析 Plane 发布 PR 的提交记录,过滤噪音并按规范分类,生成符合 GitHub Releases 格式的发布说明并更新 PR 描述。

.claude/skills/release-notes/SKILL.md makeplane/plane

Trigger Scenarios

用户请求为 Plane 发布 PR 生成发布说明 用户要求根据 PR 提交内容更新 PR 描述

Install

npx skills add makeplane/plane --skill release-notes -g -y
More Options

Non-standard path

npx skills add https://github.com/makeplane/plane/tree/preview/.claude/skills/release-notes -g -y

Use without installing

npx skills use makeplane/plane@release-notes

指定 Agent (Claude Code)

npx skills add makeplane/plane --skill release-notes -a claude-code -g -y

安装 repo 全部 skill

npx skills add makeplane/plane --all -g -y

预览 repo 内 skill

npx skills add makeplane/plane --list

SKILL.md

Frontmatter
{
    "name": "release-notes",
    "description": "Generate release notes for a Plane release PR in either `makeplane\/plane-cloud` (date-based versioning, e.g. `release: vYY.MM.DD-N`) or `makeplane\/plane-ee` (semver, e.g. `release: vX.Y.Z`). Reads PR commits, filters out noise, categorizes by conventional-commit type, optionally enriches via Plane MCP, and writes the result as the PR description in the GitHub Releases format.",
    "user_invocable": true
}

Release Notes Generator

Generate structured release notes from a Plane release PR by parsing its commit list, then update the PR description. Output matches the format used on github.com/makeplane/plane/releases (e.g. v1.2.0). Works for both makeplane/plane-cloud and makeplane/plane-ee.

Repo-specific versioning

Plane uses different version schemes across its two release repos. Detect which repo the PR belongs to and use the matching scheme when communicating about the release — the version itself does not appear in the release notes body (GitHub's release tag carries it).

Repo Version scheme Example PR title Source branch Target branch
makeplane/plane-cloud Date-based release: v26.04.13-1 uat master
makeplane/plane-ee Semver release: v1.12.0 uat master / preview
  • plane-cloud ships daily — version is vYY.MM.DD-N where N is the counter for that date's release.
  • plane-ee ships on a versioned cadence — version is vX.Y.Z (major.minor.patch) following semver.
  • Detect the repo with gh pr view <PR_NUM> --json headRepository,baseRepository or from the URL the user shared.

When to Use

  • User links/mentions a Plane release PR (e.g. release: v26.04.13-1 for cloud or release: v1.12.0 for EE) and asks for release notes
  • User asks to "create release notes" / "update PR description" for a PR in makeplane/plane-cloud or makeplane/plane-ee
  • The branch is named uat or release/x.y.z and the base is master or preview

Steps

1. Fetch commits

gh pr view <PR_NUM> --json title,body,baseRefName,headRefName,commits \
  --jq '.commits[] | .messageHeadline + "\n---BODY---\n" + .messageBody + "\n===END==="'

For a quick scan first:

gh pr view <PR_NUM> --json commits \
  --jq '.commits[] | {oid: .oid[0:10], message: .messageHeadline}'

2. Filter out noise

Always exclude these commits — mechanical, not user-facing:

Pattern Reason
Sync: Enterprise Changes #NNNN Cross-repo sync, no functional change
fix: merge conflicts Merge artifact
Merge branch '...' of github.com:... Merge artifact
Revert "..." (when immediately re-applied) Internal churn

3. Identify work item IDs (for research only)

Most meaningful commits begin with a Plane work item identifier in brackets:

  • [WEB-XXXX] — web/frontend product items
  • [SILO-XXXX] — Silo (integrations: Slack, GitHub, GitLab, Jira/Linear)
  • [MOBILE-XXXX], [API-XXXX], etc.

Do not include these IDs in the release notes. The GitHub Releases format is end-user-facing — IDs are only useful as a lookup key for fetching context in step 4.

4. (Optional) Enrich via Plane MCP

For larger features where the commit headline is terse, fetch the work item to write a richer paragraph:

mcp__plane__retrieve_work_item_by_identifier(project_identifier="WEB", issue_identifier=6874)

Use the returned name and description_stripped to flesh out the prose. Skip for routine fixes — commit body is usually enough. Don't enrich every item (slow + descriptions are often empty).

5. Categorize commits

Map each surviving commit into one of four sections:

Commit signal Section
feat: that introduces a brand-new screen, flow, or capability ✨ Features
feat: that improves an existing feature, plus most refactor: and behavioural chore: items that are user-visible ⬆️ Enhancements
fix:, fix(scope): 🐞 Bug fixes
CVE upgrades, dependency bumps that close a vulnerability, security hardening 🛡️ Security

Drop entirely (do not surface to users): pure infra chore:, dependabot bumps with no CVE, internal refactors with no behavioural impact, test-only changes, doc-only changes.

6. Format

Output follows the GitHub Releases convention — ### for section headers, with two spaces between the emoji and the label for ✨ / ⬆️ / 🐞 (matches v1.2.0).

### ✨ Features

#### **Short Feature Name in Title Case**

A 1–3 sentence paragraph describing what the user gets, why it matters, and any notable behaviour. Write in product-marketing voice, not commit-message voice.

- Optional nested bullets for sub-capabilities or callouts
- Keep them user-facing — what the user can now do

#### **Second Major Feature**

Another descriptive paragraph. Each major feature gets its own `####` subsection.

### ⬆️ Enhancements

- One-line description of an improvement to an existing capability
- Another improvement, written as a clean sentence (no commit prefix, no ticket ID)

### 🐞 Bug fixes

- Plain-English description of what was broken and is now fixed
- Another bug fix

### 🛡️ Security

- Upgraded <component> to <version> to mitigate [CVE-XXXX-NNNNN](https://link-to-advisory). Brief impact note.
- Other security-relevant change

Rules:

  • Section headers use ### (three hashes), then emoji + two spaces + label — exactly as in the published v1.2.0 release. Exception: 🛡️ Security uses a single space (matches v1.2.0).
  • Features use #### (four hashes) and the feature name is bolded inside the heading: #### **Feature Name**.
  • Each feature gets a real paragraph, not a bullet — written for end users, not engineers.
  • Enhancements, Bug fixes, and Security are simple bullets. No nested asterisks, no ticket IDs, no PR numbers.
  • Do not include work item IDs ([WEB-XXXX]) or PR numbers ((#NNNN)) in any section — this format is user-facing.
  • Do not add a # Release vX.Y.Z heading. The GitHub release tag carries the version; the body starts directly with the first ### ✨ Features section.
  • Do not insert images. The user adds screenshots manually after the notes are drafted. Leave space for them only if the user asks.
  • Drop empty sections entirely.
  • Blank line between section header and first bullet/feature, and between sections.

7. Update the PR description

gh pr edit <PR_NUM> --body "$(cat <<'EOF'
<release notes markdown>
EOF
)"

Always use a HEREDOC with single-quoted 'EOF' so backticks/dollars in the notes are preserved.

Quick Reference: end-to-end

PR=2498
gh pr view $PR --json commits --jq '.commits[] | .messageHeadline + "\n---\n" + .messageBody + "\n==="' > /tmp/commits.txt
# read /tmp/commits.txt, filter, categorize into the four sections, draft notes
gh pr edit $PR --body "$(cat <<'EOF'
### ✨  Features

#### **...**

...

### ⬆️  Enhancements

- ...

### 🐞  Bug fixes

- ...

### 🛡️ Security

- ...
EOF
)"

Reference example

The canonical target format is v1.2.0 on makeplane/plane. When in doubt about heading levels, spacing, bolding, or paragraph voice, match that page exactly (minus images).

Common Mistakes

  • Including work item IDs in bullets — the GitHub Releases format is user-facing; [WEB-XXXX] belongs in internal research, not the output.
  • Adding a # Release vX.Y.Z heading — GitHub's release tag is the version. The body starts with ### ✨ Features.
  • Copy-pasting commit subjects verbatim — rewrite into product-marketing English. "fix: peek overview reload on parent add" → "Fixed peek overview reloading on adding a parent".
  • Bulleting features instead of writing paragraphs — major features get #### **Name** plus a real paragraph; only enhancements/bugs/security use bullets.
  • Including Sync: Enterprise Changes commits — these are sync PRs, never user-visible.
  • Including fix: merge conflicts — merge artifact, no functional content.
  • Inserting images — leave images for the user; they add screenshots manually.
  • Using --body without HEREDOC — backticks/dollar signs get shell-interpreted and corrupt the notes.
  • Editing the PR title — release PR titles are version markers; only edit the body.
  • Adding a Chores section — the GitHub Releases format has no Chores section; user-invisible chores are dropped entirely.

Plane-Specific Conventions

  • Release PRs go from uatmaster (or preview).
  • PR title format:
    • plane-cloud: release: vYY.MM.DD-N where N is the daily release counter for that date.
    • plane-ee: release: vX.Y.Z semver (major.minor.patch).
  • Commits coming from feature branches always carry a work item ID; commits without one are usually infra/chores and almost always dropped from notes.
  • Sync: Enterprise Changes #NNNN are automated cross-repo syncs and are always skipped.
  • CVE-related upgrades (NextJS, React, Django, nginx, etc.) belong under 🛡️ Security with a link to the advisory and a one-line impact note.

Version History

  • 7fbf14a Current 2026-07-06 00:21

Same Skill Collection

.claude/skills/branch-name/SKILL.md
.claude/skills/create-pull-request/SKILL.md
.claude/skills/react-doctor/SKILL.md
.claude/skills/translate/SKILL.md

Metadata

Files
0
Version
65f4a99
Hash
7f733743
Indexed
2026-07-06 00:21

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-05 06:17
浙ICP备14020137号-1 $방문자$