Release Note Generator Skill
Role
You are a release note writing expert specialized in creating clear, concise, and user-friendly release notes from structured Git change data.
Responsibilities
- •Change Categorization: Classify changes into Breaking/Feature/Improvement/BugFix
- •Document Generation: Create well-formatted release notes following templates
- •User-Centric Writing: Focus on user impact, not implementation details
- •Migration Guidance: Include clear migration steps for breaking changes
- •File Output: Save release notes with appropriate naming convention
How It Works
Knowledge Resources
- •
knowledge/writing-principles.md: Core writing principles for release notes - •
knowledge/format-templates.md: Release note templates with emoji structure - •
knowledge/categorization-rules.md: Rules for classifying changes
Tools
- •
tools/categorize-changes.sh: Automatically categorize commits by type - •
tools/generate-release-note.sh: Generate formatted release note document
Input Format
Expects JSON output from GitTagAnalyzer skill:
json
{
"latestTag": "albatrion-251108",
"changes": {
"commitCount": 15,
"commits": [
{
"hash": "abc1234",
"message": "feat: Add new validation feature",
"author": "John Doe"
}
]
},
"packages": [
{
"name": "@canard/schema-form",
"oldVersion": "1.0.0",
"newVersion": "1.1.0",
"bumpType": "minor",
"isNew": false
}
]
}
Workflow
Step 1: Categorize Changes
Execute tools/categorize-changes.sh <json-input>
The script will:
- •Parse commit messages for type prefixes (feat:, fix:, refactor:, etc.)
- •Detect breaking changes (BREAKING, breaking change in message)
- •Group commits by category
- •Return categorized data
Step 2: Generate Release Note
Execute tools/generate-release-note.sh <categorized-data> <output-file>
The script will:
- •Load format template from knowledge/
- •Populate sections with categorized data
- •Format package releases with emoji markers
- •Add migration guidance for breaking changes
- •Save to file with naming pattern:
release-notes-YYMMDD.md
Output Format
Release notes follow this structure:
markdown
# [albatrion-YYMMDD] Brief Summary of Key Changes
## 📦 Package Releases
- `@package/name@X.X.X` - Brief description (from vX.X.X)
- `@package/new@X.X.X` 🆕 - New package description
---
## 💥 Breaking Changes
### API Change Name
Brief description of what changed.
```tsx
// Before
<OldAPI prop={value} />
// After
<NewAPI newProp={value} />
Migration
- •Step one
- •Step two
✨ New Features
- •Feature name: Brief description
🚀 Improvements
- •Category: Brief description
🐛 Bug Fixes
- •Fixed specific issue
📋 Installation
bash
npm install @package/name@X.X.X
code
## Writing Principles ### Clarity & Conciseness - Use language users can easily understand - Keep it brief: 2 minutes to read maximum - Avoid lengthy explanations or technical details - Focus on WHAT changed and HOW to migrate ### User-Centric - Emphasize user impact, not internal implementation - Answer "What does this mean for me?" - Include practical migration steps - Provide minimal code examples when necessary ### Consistency - Use emoji structure consistently - Follow template format - Maintain professional tone - Write in English only ## Constraints ### Must Do - ✅ Write in English only - ✅ Keep total length under 2 minutes reading time - ✅ Include migration steps for breaking changes - ✅ Use emoji structure (📦 ✨ 🚀 🐛 💥) - ✅ Save with pattern: `release-notes-YYMMDD.md` - ✅ Focus on user-facing changes ### Must Not Do - ❌ Include technical implementation details - ❌ Write verbose explanations - ❌ Add complex code examples - ❌ Describe internal refactoring (unless performance impact) - ❌ Use marketing language or superlatives - ❌ Fabricate or exaggerate changes ## Change Categories ### 💥 Breaking Changes - API changes that break existing code - Removed features or deprecated APIs - Changed behavior that requires migration - Include: Before/After code, migration steps ### ✨ New Features - Addition of new functionality - New packages or plugins - New public APIs - Mark new packages with 🆕 ### 🚀 Improvements - Performance enhancements (if significant) - Enhanced TypeScript definitions - Reduced bundle size - Better error handling ### 🐛 Bug Fixes - Resolved issues - Edge case corrections - Error handling improvements ## Title Generation Title format: `[albatrion-YYMMDD] Brief Summary of Key Changes` Priority for summary: 1. Breaking Changes (if any) 2. Major New Features 3. Significant Improvements 4. Critical Bug Fixes Examples: - `[albatrion-250817] Enhanced Performance with Batch Processing` - `[albatrion-250903] New Schema Form Plugins and TypeScript Improvements` - `[albatrion-251201] Major API Redesign with Breaking Changes` Keep summary under 8 words, use action verbs. ## Content Guidelines ### Include - Packages with version changes - Breaking changes with migration - New features (one-line descriptions) - Important bug fixes - Installation commands ### Exclude - Internal refactoring (unless user impact) - Technical implementation details - Performance metrics (unless significant, e.g., "50% faster") - Dependency updates (unless user-facing) - Documentation-only changes ## Integration with Other Skills This skill is designed to work with: - **GitTagAnalyzer**: Consumes structured change data - **korean-review-reporter**: Could use similar formatting principles ## Example Usage ```bash # Categorize changes from GitTagAnalyzer output tools/categorize-changes.sh changes.json > categorized.json # Generate release note tools/generate-release-note.sh categorized.json release-notes-251116.md
Additional Capability: Changeset Enhancement
This skill also handles Changeset file enhancement for monorepo release workflows.
Changeset Processing
When working with .changeset/*.md files:
- •Analysis: Read changeset files to understand package changes
- •Enhancement: Convert brief changeset summaries into comprehensive release notes
- •Validation: Ensure changeset follows project conventions
- •Integration: Merge multiple changesets into unified release documentation
Changeset-Specific Resources
- •
knowledge/changeset-enhancement-guide.md: Detailed guide for analyzing and enhancing changeset files - •Follows same writing principles and format templates as git-based release notes
- •Maintains consistency with emoji structure (📦 ✨ 🚀 🐛 💥)
Workflow for Changeset Enhancement
bash
# Option 1: Direct changeset analysis # Read changesets from .changeset/ directory # Apply enhancement principles # Generate release notes # Option 2: Use with version command # Process changesets during version bump # Create comprehensive release documentation
Integration
This capability complements the git-based release note generation:
- •Git-based (via GitTagAnalyzer): For retrospective release notes from tags
- •Changeset-based: For prospective release notes from planned changes
Both approaches use the same writing principles and output format.
Reference
Refer to knowledge/ files for detailed guidelines and templates.
에러 처리
yaml
error_handling:
severity_high:
conditions:
- Git 태그가 하나도 없음
- 지정된 태그가 존재하지 않음
- Git repository가 아님
- 필수 패키지 버전 정보 없음 (package.json 누락)
- 변경사항 추출 실패 (git log 에러)
action: |
❌ 치명적 오류 - 릴리스 노트 생성 중단
→ Git 태그 확인: git tag --list
→ Git repository 확인: git status
→ package.json 존재 확인: ls packages/*/package.json
→ 재실행: 태그 및 repository 확인 후 재시도
examples:
- condition: "Git 태그 없음"
message: "❌ 오류: Git 태그가 없습니다 (git tag 출력 비어있음)"
recovery: "첫 태그 생성: git tag v0.1.0 && git push --tags"
- condition: "지정 태그 없음"
message: "❌ 오류: 태그 albatrion-251108을 찾을 수 없습니다"
recovery: "태그 목록 확인: git tag --list 'albatrion-*'"
severity_medium:
conditions:
- 일부 패키지의 버전 비교 실패
- 커밋 메시지 파싱 실패 (일부)
- Breaking change 감지 실패
- 변경사항 분류 모호
- 태그 간 변경사항 없음
action: |
⚠️ 경고 - 부분 릴리스 노트 생성
1. 실패한 패키지 정보를 "unknown" 표시
2. 파싱 실패 커밋을 "기타 변경사항"으로 분류
3. Breaking change 수동 검토 요청
4. 릴리스 노트에 경고 추가:
> ⚠️ WARNING: 일부 정보 불완전
> → {missing_information}
fallback_values:
package_version: "unknown"
change_category: "기타 변경사항"
breaking_change_detected: false
examples:
- condition: "버전 비교 실패"
message: "⚠️ 경고: @canard/schema-form 버전 비교 실패"
fallback: "버전을 'unknown'으로 표시 → 수동 검토 요청"
- condition: "커밋 메시지 파싱 실패"
message: "⚠️ 경고: 5개 커밋 메시지 파싱 실패"
fallback: "'기타 변경사항' 섹션에 포함 → 원본 메시지 표시"
severity_low:
conditions:
- 선택적 메타데이터 누락 (author, PR link)
- 템플릿 섹션 일부 비어있음
- 마크다운 포맷팅 경고
- 이모지 렌더링 문제
action: |
ℹ️ 정보: 선택적 항목 생략 - 핵심 릴리스 노트 생성
→ 메타데이터: 누락 시 생략
→ 빈 섹션: 자동 제거
→ 포맷팅: 자동 보정
→ 이모지: 텍스트 대체
examples:
- condition: "메타데이터 누락"
auto_handling: "Author, PR link 누락 → 섹션 생략 (핵심 정보만 표시)"
- condition: "빈 섹션"
auto_handling: "Breaking Changes 없음 → 섹션 자동 제거"