release-notes
Use when the user asks to enhance, refine, polish, or "look at" the release notes for a tag of @epam/ai-dial-react-pdf-highlighter — typically a freshly cut release. Reads the CI-generated notes off the GitHub release, classifies and rewrites each bullet in this project's editorial voice, and saves a draft to `.claude/release-notes/`. Also identifies whether CHANGELOG.md needs updating for breaking changes. Never edits GitHub directly.
来源信息
- 仓库
- epam/ai-dial-react-pdf-highlighter
- 最近来源活动
- 2026年8月19日 11:30
- 检测到的 SKILL.md 语言
- 英语
- 星标
- 0
- 分支
- 0
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- release-notes
- description
- Use when the user asks to enhance, refine, polish, or "look at" the release notes for a tag of @epam/ai-dial-react-pdf-highlighter — typically a freshly cut release. Reads the CI-generated notes off the GitHub release, classifies and rewrites each bullet in this project's editorial voice, and saves a draft to `.claude/release-notes/`. Also identifies whether CHANGELOG.md needs updating for breaking changes. Never edits GitHub directly.
- allowed-tools
- Read Grep Glob Bash(gh release view:*) Bash(gh release list:*) Bash(gh pr view:*) Bash(gh pr list:*) Bash(gh pr diff:*) Bash(git log:*) Bash(git show:*) Bash(git diff:*) Bash(git tag:*) Bash(git rev-parse:*) Bash(date:*) Write(.claude/release-notes/*)
- argument-hint
- [tag]
- arguments
- tag
- model
- opus
- effort
- xhigh
- context
- fork
- agent
- general-purpose
# @epam/ai-dial-react-pdf-highlighter — release-notes enhancer
This repo's release CI (the shared `epam/ai-dial-ci` `node_release.yml` workflow, wired in
`.github/workflows/release.yml`) publishes a GitHub release for every tag with bullets that are
the raw PR titles. Those bullets carry noise — conventional-commit prefixes (`feat:`, `fix:`,
`chore:`), issue refs, and an `## Other` bucket that mixes real dependency/security bumps with
pure CI/tooling churn (`[skip ci] ...`, `Release (#N)`, dependabot groups). This skill reproduces
the human editorial pass that turns those raw notes into something a consumer of the package
would actually want to read.
You are running in a forked, isolated context. Read and research freely — only the final summary
you return reaches the main conversation. All file writes happen in this fork; the draft lands at
`.claude/release-notes/<tag>-draft.md`.
## When to use
- "Enhance the release notes for `0.1.4`"
- "Look at the latest release notes and refine them"
- "The CI just published `<tag>`, make it readable"
- "Polish the release notes for the current tag"
Do **not** trigger on requests like "what changed in `0.1.4`?" — that is a recall question, not a
notes-editing task.
## Inputs
`tag` = `$tag` — the GitHub release tag to enhance (e.g. `0.1.4`). If empty, pick the most recent
tag from `gh release list --limit 5` and confirm with the user before editing.
This package has cut several stable releases already (`0.1.0`–`0.1.4` as of writing,
`package.json` version tracks the latest). Always try to anchor style against the immediately
preceding release (step 1.3) — don't skip it as you might for a first release.
## Workflow
### 1. Resolve target and reference styles
1. `gh release view <tag> --json body,name,tagName` — capture the raw CI notes.
2. `gh release list --limit 10` — locate the previous release.
3. `gh release view <prev-tag> --json body` — use it as a style anchor, matching terseness (one
line per bullet).
4. `git log <prev-tag>..<tag> --oneline` — full commit list for the range, to spot commits the CI
dropped or squash-merged without a clean PR title.
### 2. Pull source context for each bullet
For every bullet in the raw notes:
1. Parse out the trailing `(#<PR>)`. This repo's PR titles are flat Conventional Commits —
`feat: add rotation support (#25)`, `fix: Don't show error if fileName is not passed (#46)` —
without per-component scope prefixes, and issue numbers are rare.
2. `gh pr view <PR> --json title,body,labels` — read the PR body for the _why_; the title alone is
often just the commit subject.
3. For bullets without a PR number (e.g. `Release (#9)`, `[skip ci] chore: update CODEOWNERS
file`, `Empty commit`, `format package.json`), find the matching commit with
`git log <range> --oneline | grep -i <keywords>` and `git show <hash>` if there's any doubt
about consumer relevance — most of these turn out to be pure noise (see §4).
**Dependency-bump PRs:** This repo has a heavy stream of dependabot/renovate-style bumps —
`chore: bump the ai-dial-ci group with 3 updates`, `chore: bump shell-quote and concurrently`,
`chore: bump hono from 4.12.18 to 4.12.25`, `chore: bump js-yaml from 4.1.1 to 4.2.0` — most of
which are dev-only tooling with zero runtime impact for a consumer of the published library
(`hono`/`qs`/`express-rate-limit` etc. come in via the MCP dev server and CI tooling, not the
shipped `dist/`). Treat these as noise **unless** the PR title/body flags a CVE or security
advisory (e.g. `chore: bump ip-address and express-rate-limit (#29)` when it's fixing a known
vulnerability) — those stay, folded into `Fixes`.
### 3. Check CHANGELOG.md for breaking changes
Before writing the draft, read `CHANGELOG.md`. This project follows
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/) with `### Added` / `### Changed` /
`### Fixed` / `### Removed` subsections under each version heading. `CONTRIBUTING.md` only asks
contributors to "mention breaking changes clearly in PR description" — there is no hard CI gate
requiring a CHANGELOG entry, so don't assume one exists just because a change is breaking.
- If the raw release notes contain a change that removes/renames a public export from
`src/index.ts` (e.g. `PDFViewer`, `DocumentPreview`, `DocumentPreviewCacheProvider`,
`PdfPreviewLoader`, `PageThumbnail`) or alters `PdfViewerProps` / `DocumentPreviewProps` /
`PdfPreviewLoaderProps` / `PageThumbnailProps` or other public prop shapes, confirm it's called
out in `CHANGELOG.md` under the matching version with enough guidance for a consumer to migrate.
- If such a breaking change appears in the raw release notes but **not** in `CHANGELOG.md`, note
this in the editorial file as an open question — the user needs to add the CHANGELOG entry
before the release is complete.
### 4. Classify each bullet
The raw CI's `## Features` / `## Fixes` / `## Other` partition is unreliable (this repo's recent
releases don't even surface a `## Tests` section, but treat one the same way if it appears).
Reclassify by actual consumer impact:
| Where CI put it | Where it belongs | Rule |
| ------------------------------------------- | ----------------- | --------------------------------------- |
| `Other` starting with `feat:` | `Features` | A feat that lost its slot. |
| `Other` starting with `fix:` | `Fixes` | Same, for fix. |
| `Tests` — any entry | **Drop** | Zero consumer impact. |
| Multiple PRs on the same component/feature | one folded entry | Cite PR numbers in parens. |
| `Other` for a security dep bump (CVE) | `Fixes` | Security items are consumer-relevant. |
| `Other` for CI-only trusted-publishing setup (`add id-token: write`, `bump CI version to use trusted publishing`) | **Drop** | No consumer-visible effect. |
**Drop these entirely** — no consumer-visible effect:
- All `## Tests` entries, if present (added/updated unit tests, coverage work, Storybook story
additions that only cover existing behavior).
- Release-mechanics commits: `Release (#N)`, `Release 1 (#N)`, `Empty commit`, `[skip ci] ...`,
`format package.json`, CODEOWNERS updates.
- CI/tooling-only changes: workflow renames, `bump CI version to use trusted publishing`,
`add id-token: write for trusted publishing`, dependabot-group bumps for `ai-dial-ci`.
- Routine dev-dependency bumps that aren't security-relevant (`shell-quote`, `concurrently`,
`hono`, `qs`, `postcss`, `fast-uri`, `js-yaml`, MCP-server-only deps) unless the user wants a
full dependency ledger.
- Pure internal refactors, renames, test-only changes, `Merge remote-tracking` commits.
**Keep in `Other`** — items consumers or maintainers care about:
- Security-adjacent dependency bumps (CVE fixes — e.g. `ip-address`/`express-rate-limit`,
`brace-expansion` when flagged as a Trivy/security fix).
- Peer dependency changes to `@epam/ai-dial-ui-kit`, `@epam/pdf-highlighter-kit`, or React that
affect what consumers must install.
- Significant dev tooling that affects contributors (e.g. new Storybook capability, new required
Node/npm version).
**Flag as `[Breaking]`** — items that require consumer code changes:
- Renamed/removed exports from `src/index.ts`, changed `PdfViewerProps` / `DocumentPreviewProps` /
other public prop shapes, altered zoom/rotation/highlight-navigation contracts, removed hooks
(`useDocumentPreview`, `useDocumentPreviewCache`).
- Include migration guidance inline: `(#<PR>) — migrate by <one-line instruction>`.
If unsure whether to keep a bullet: _would someone consuming `@epam/ai-dial-react-pdf-highlighter`
reading these notes care?_ If no, drop it.
### 5. Rewrite each kept bullet
Raw form: `feat: description (#NNN)` or `fix: description (#NNN)`. Rewrite to:
```
* <Active-voice description of what changed> — <brief why-it-matters> (#<PR>)
```
Rules in order of importance:
1. **One line per bullet.** No multi-paragraph descriptions.
2. **Drop the conventional prefix** (`feat:`, `fix:`, `chore:`, `refactor:`). Replace with prose.
3. **Use a `—` em-dash for the "why" clause**, not a hyphen or colon.
4. **Backticks for code identifiers**: exported component names (`` `PDFViewer` ``,
`` `DocumentPreview` ``, `` `PdfPreviewLoader` ``, `` `PageThumbnail` ``), prop names
(`` `onViewerReady` ``, `` `autoFocusFirstHighlight` ``), hook names
(`` `useDocumentPreview` ``), type/enum names (`` `RotationDirection` ``).
5. **Preserve PR refs at the end** in `(#<PR>)` form. For grouped entries list all PRs:
`(#8, #10, #13)`.
6. **Prefix with `[Breaking]`** for breaking changes; state the migration inline.
7. **Flag regressions explicitly**: `(regression fix)` for items restoring previously-working
behavior.
8. **Quote CVE IDs verbatim** for security upgrades.
9. **For new exported components/hooks**, lead with the name in backticks:
`` `PageThumbnail` added — ... ``.
#### Example transformations (this project's patterns)
```
# New feature, active voice:
- * feat: update pdf library with rotation functionality (#25)
+ * Added page-rotation support via `RotationDirection` / `PageRotationDegrees` (#25)
# Component-scoped fix, kept literal component tag:
- * fix: (PdfViewer) defer highlight navigation until initial zoom resolves (#24)
+ * `PDFViewer` now defers highlight navigation until the initial zoom resolves — fixes premature jumps on load (#24)
# Dropping the conventional prefix, em-dashing the why:
- * fix: Don't show error if fileName is not passed (#46)
+ * `DocumentPreview` no longer shows an error when `fileName` is omitted (#46)
# Security-relevant dependency bump, kept and reclassified into Fixes:
- * bump ip-address and express-rate-limit (#29)
+ * Bumped `ip-address`/`express-rate-limit` to address a reported SSRF advisory (#29)
# Breaking change with inline migration note:
- * feat: rename `PdfViewerProps.onReady` to `onViewerReady` (#NNN)
+ * [Breaking] `PdfViewerProps.onReady` renamed to `onViewerReady` (#NNN) — update the prop name; signature is unchanged
# Dropping release-mechanics noise:
- * Release (#9) ← drop entirely
- * [skip ci] chore: update CODEOWNERS file ← drop entirely
- * format package.json ← drop entirely
# Dropping CI/tooling noise:
- * add id-token: write for trusted publishing ← drop (CI-only)
- * bump CI version to use trusted publishing and fix npm script publish ← drop (CI-only)
# Dropping routine dev-dependency bumps:
- * bump the ai-dial-ci group with 3 updates (#30) ← drop
- * chore: bump shell-quote and concurrently (#42) ← drop
- * chore: bump hono from 4.12.18 to 4.12.25 (#37) ← drop (dev-only, non-security)
```
### 6. Save the draft (and optional editorial companion)
Write:
- **`.claude/release-notes/<tag>-draft.md`** — the final notes, ready to paste into the GitHub
release body. No preamble or commentary — just headings and bullets.
- **`.claude/release-notes/<tag>-editorial-notes.md`** _(optional, only when useful)_ —
non-obvious calls worth surfacing:
- Grouping decisions (which PRs were folded and why).
- Items dropped, with one-line reason each.
- Open questions (missing CHANGELOG entry for a breaking change, ambiguous classification, an
unrecognized dependency).
### 7. Verify nothing was pushed to GitHub
This skill **never** runs `gh release edit`, `gh release create`, or any write operation against
the repo. Drafts only.
## Output format
The file saved to `.claude/release-notes/<tag>-draft.md` follows this shape exactly (including
`---` separators, which match the CI format):
```markdown
## Features
- <one bullet per change or group>
---
## Fixes
- <one bullet per change>
---
## Other
- <only consumer- or maintainer-relevant items>
```
Omit any section that has no entries. Do **not** include a `## Tests` section. Section order:
`Features` → `Fixes` → `Other`.
Breaking changes appear at the **top of `Features`** (or `Fixes` if it is only a behavioral
correction), prefixed with `[Breaking]`.
## Return to the main conversation
Return a short summary — five lines or fewer:
- The draft path (`.claude/release-notes/<tag>-draft.md`).
- Counts of bullets per section after enhancement and grouping.
- Groupings that happened (e.g. "folded the zoom-timing fix into the rotation feature bullet").
- Reclassifications (e.g. "moved 1 from Other → Fixes").
- Items dropped (count, with one example).
- Whether any breaking changes were found, and if their CHANGELOG.md entries exist.
- Any open questions (missing migration note, ambiguous item, unrecognized dependency).
Example:
> Drafted `.claude/release-notes/0.1.4-draft.md`. 1 Feature, 2 Fixes, 0 Other. Reclassified 1 item
> (Other → Fixes: trusted-publishing `id-token` grant folded into release-fix bullet). Dropped 18
> items (dependabot/renovate dependency-group bumps, CI trusted-publishing chores). No breaking
> changes detected.
## Safety rails
- **Never edit GitHub.** No `gh release edit`, no `gh release create`. Drafts only.
- **Never invent items.** Every kept bullet maps to a PR or a commit hash in the range.
- **Never silently drop a PR reference.** The bullet ends with the canonical `(#<PR>)` refs.
- **Match the terseness of the predecessor's notes.**
## Maintenance
If you notice a pattern in the raw CI notes that this skill doesn't handle (a new CI section, a
recurring rewrite the user keeps requesting, a dependency category that misroutes), surface it in
your return summary and offer to update this `SKILL.md`. The user can confirm before any edit
lands.
在 GitHub 查看