Generate professional Bytebase release notes by analyzing git commits, checking Terraform impact, searching Linear for customer feedback, and following established conventions. Creates Linear tracking issue and owner confirmation comments (with user approval before each write operation). Use when preparing release notes for minor or patch versions.
/plugin marketplace add bytebase/team-skills/plugin install bytebase-team-skills@bytebase-team-skill-marketThis skill inherits all available tools. When active, it can use any tool Claude has access to.
A systematic skill for generating professional Bytebase release notes by analyzing git commits, checking Terraform impact, and following established conventions.
This skill helps you create release notes for Bytebase releases by:
docs/release-notes/draft-X.Y.Z.md for iteration<version>-<date>_release_note (with user confirmation)Note: All Linear write operations (creating issues, posting comments) require explicit user confirmation before execution.
# List available tags
git tag --list "*<major>.<minor>*" | sort -V
# Check for release branches
git branch -a | grep -E "release/<major>.<minor>"
# Get the latest tag
git describe --tags --abbrev=0
IMPORTANT: The version type affects what sections are allowed in the release notes.
| Version Change | Type | Example |
|---|---|---|
| 3.12.x → 3.13.0 | Minor | Minor digit increases |
| 3.12.0 → 3.12.1 | Patch | Patch digit increases |
Rules by version type:
| Section | Minor Version | Patch Version |
|---|---|---|
| Notable Changes | ✅ Expected | ⚠️ Unusual - confirm with user |
| Features | ✅ Expected | ⚠️ Unusual - confirm with user |
| Enhancements | ✅ Yes | ✅ Yes |
| Bug Fixes | ✅ Yes | ✅ Yes (primary focus) |
ALWAYS confirm the version before proceeding:
I've identified the following version information:
- Previous version: [X.Y.Z]
- New version: [A.B.C]
- Version type: [Minor/Patch]
Is this correct? If not, please provide the correct versions.
If you cannot determine versions from branches/tags, ASK the user immediately.
# If new version is tagged
git log <prev-version>..<new-version> --oneline --decorate
# If new version is a release branch (common case)
git log <prev-version>..origin/release/<new-version> --oneline --decorate
Output: List of all commits with their hashes and one-line messages.
Use TodoWrite to create tasks:
For each batch, run these in parallel:
git show --stat <commit-hash>
What to extract from each commit:
For each significant change, identify the owner:
# Get the author with most changes for a feature area
git log <prev-version>..origin/release/<new-version> --format='%an' -- <path-pattern> | sort | uniq -c | sort -rn | head -1
# For a specific commit
git show --format='%an <%ae>' -s <commit-hash>
Document the owner for each release note item - we need to confirm correctness with them.
IMPORTANT: Multiple PRs may implement or fix the same Linear issue. Before categorizing, check if commits are related:
gh pr view <number> --json title,body to see PR detailsIf multiple PRs are for the same Linear issue:
Example:
# These two PRs are both for BYT-8543:
PR #18582: "fix: bring issue label limit back" (quick fix)
PR #18586: "refactor(plan): show issue labels in two-step creation flow" (follow-up UX improvement)
# Consolidate to single item:
- Fix issue label selector missing in new CI/CD layout (BYT-8543)
Use this decision tree:
Is it a breaking change or behavior change?
├─ YES → Notable Changes (⚠️ If patch version, flag for confirmation)
└─ NO
├─ Does it fix a bug/issue?
│ └─ YES → Bug Fixes
└─ NO
├─ Is it a new capability?
│ └─ YES → Features (⚠️ If patch version, flag for confirmation)
└─ Is it an improvement/optimization?
└─ YES → Enhancements
Specific patterns:
| Commit Pattern | Category | Example |
|---|---|---|
fix: prefix | Bug Fixes | fix: SQL Editor tab caching |
feat: new capability | Features | feat: IdP-initiated SSO |
feat: improvement | Enhancements | feat: MSSQL explain visualization |
refactor: with user impact | Enhancements | refactor: webhook message |
refactor: no user impact | Omit | refactor: internal helper |
chore: with user impact | Enhancements | chore: optimize SQL editor tabs |
chore: no user impact | Omit | chore: update dependencies |
| Validation ERROR→WARNING | Notable Changes | MySQL validation rules |
| Security restriction | Notable Changes or Enhancements | IAM credential restrictions |
| Parser migration | Enhancements | Doris parser upgrade |
For EACH categorized change, check if it affects Terraform configuration:
# Search for changes to Terraform-related files
git show --stat <commit-hash> | grep -E "(terraform|provider|resource)"
# Check API changes that might affect Terraform
git show --stat <commit-hash> | grep -E "proto/v1/(project|database|instance|environment|setting|policy)"
# Check for resource name/field changes
git show <commit-hash> -- "proto/**/*.proto" | grep -E "(field|option|message|enum)"
Key areas that affect Terraform:
| Change Area | Terraform Impact | Check Files |
|---|---|---|
| API field rename/remove | Breaking - config update required | proto/v1/*.proto |
| New API field | May need config update | proto/v1/*.proto |
| Resource behavior change | May affect state | Backend handlers |
| Default value change | May affect plan/apply | Service layer |
| Validation rule change | May cause apply failures | Validators |
For changes that affect Terraform, add to the release note:
- [Change description] (**Terraform**: [impact description, e.g., "update `bytebase_instance` resource field `x` to `y`"])
Example:
- Rename environment resource field from `tier` to `environment_tier` (**Terraform**: update `bytebase_environment` resource configuration to use new field name)
Use Linear MCP tools to find customer-reported issues:
mcp__linear__list_issues with:
- query: relevant keywords from commits
- labels: "customer-feedback", "bug", "customer-reported"
Search strategies:
Present found Linear issues:
I found the following Linear issues that may be related to this release:
- [ISSUE-123]: Description (Status: Done)
- [ISSUE-456]: Description (Status: Done)
Which of these should be highlighted as customer-reported fixes in the release notes?
Visit and analyze 2-3 recent releases:
URL: https://github.com/bytebase/bytebase/releases
Use WebFetch tool to extract:
IMPORTANT: Do NOT limit items during initial writing. Write release notes for ALL significant changes first.
For each section, compile:
| Priority | Criteria | Treatment |
|---|---|---|
| P0 | Customer-reported bugs, security issues, data corruption | Must include in Bug Fixes, list first |
| P1 | Breaking changes, new major features, Terraform-affecting | Must include in Notable Changes or Features |
| P2 | User-facing improvements, performance gains | Include if space permits |
| P3 | Internal refactors with indirect benefits | Group or omit |
| P4 | Code cleanup, internal changes | Omit |
After writing all items, present to user:
## Full Release Notes (for your review)
### Notable Changes (X total) — INCLUDE ALL
All notable changes should be included as they may affect existing customers:
1. [Change] — Owner: [Name] | Terraform: [Yes/No]
2. [Change] — Owner: [Name] | Terraform: [Yes/No]
... (no limit)
### Features (X total)
**Recommended (Top 8)**:
1. [Feature] — Owner: [Name]
...
**Additional items (for your consideration)**:
9. [Feature] — Owner: [Name]
...up to 20
### Enhancements (X total)
**Recommended (Top 8)**:
1. [Enhancement] — Owner: [Name]
...
**Additional items (for your consideration)**:
9. [Enhancement] — Owner: [Name]
...up to 20
### Bug Fixes (X total)
**Recommended (Top 8)**:
1. [Fix] — Owner: [Name]
...
**Additional items (for your consideration)**:
9. [Fix] — Owner: [Name]
...up to 20
Please review and let me know which items to include in the final release notes.
IMPORTANT: Notable Changes have NO limit — include ALL of them since they may affect existing customer configurations and workflows.
If this is a PATCH version and Notable Changes or Features were found:
⚠️ ATTENTION: This is a patch version upgrade (X.Y.Z → X.Y.Z+1), but I found:
- [N] Notable Changes
- [N] Features
Patch versions typically should NOT contain Notable Changes or Features.
Please confirm:
1. Should these be reclassified as Enhancements?
2. Should this actually be a minor version upgrade?
3. Are these exceptions that should remain as-is?
Section Order: Notable Changes → Features → Enhancements → Bug Fixes
# X.Y.Z - Month Day, Year
## Notable Changes
- [Behavior change with explanation of impact]
- [Breaking change with migration guidance if needed]
- [Change affecting Terraform] (**Terraform**: [update instructions])
## Features
- **[Database Name]** — [New capability description]
- [New feature with user benefit]
## Enhancements
- **[Database Name]** — [Specific capability added]
- [General improvement with user benefit]
- [Feature area] improvements including:
- [Specific improvement 1]
- [Specific improvement 2]
- [Specific improvement 3]
- [Performance optimization with measurable impact]
- [Infrastructure upgrade with user-facing benefit]
## Bug Fixes
- Fix [customer-reported issue 1 - describe the problem]
- Fix [customer-reported issue 2 - describe the problem]
- Fix [critical user-facing issue]
- Fix [important data display issue]
- Fix [workflow blocking issue]
---
**IMPORTANT:** Before upgrading to this version, please backup the [metadata](https://www.bytebase.com/docs/administration/back-up-restore-metadata/). Bytebase doesn't support in-place downgrade. Also avoid running multiple Bytebase containers sharing the same data directory. Otherwise, it may corrupt the metadata.
Grammar and Style:
Content Rules:
**Database Name** — for DB-specific featuresExamples:
Good (concise, user-focused):
- Fix rollout date filter not working
- Fix SQL review showing incorrect line numbers for multi-statement SQL
- Show issue labels in "Ready for Review" popover during Plan creation
- **SQL Server** — Add visualized EXPLAIN support
Bad (too detailed or too vague):
- Fix SQL Editor tab caching preventing stale database query contexts from being loaded (too long)
- Show issue labels in "Ready for Review" popover during Plan creation, making the two-step Plan → Issue workflow clearer since labels are Issue properties (includes unnecessary reasoning)
- Fix advisor line position and refactor statement text architecture (technical implementation detail instead of user impact)
- Fixed bug in cache implementation (too vague)
- New MSSQL feature (too vague)
Before finalizing:
IMPORTANT: Before each Linear write operation, you MUST confirm with the user. Never create issues or comments without explicit user approval.
After finalizing the release notes draft, prepare to create a Linear issue to track confirmations.
Issue Title Format: <version>-<date>_release_note
3.13.1-20251230_release_noteIssue Description: Include the full release notes content and an owner confirmation table.
⚠️ CONFIRM WITH USER BEFORE CREATING:
Present the issue details and ask for confirmation:
I'm ready to create a Linear issue to track the release notes:
**Title:** 3.13.1-20251230_release_note
**Team:** Bytebase
**Assignee:** Peter Zhu
**Priority:** High
**Description:**
[Show the full release notes content that will be included]
Should I create this Linear issue? (yes/no)
Only proceed with mcp__linear__create_issue after user confirms.
After creating the issue, prepare to subscribe Danny Xu and Tianzhou Chen.
⚠️ CONFIRM WITH USER BEFORE COMMENTING:
I'll now add a comment to subscribe stakeholders (Danny and Tianzhou) to the issue.
**Comment preview:**
"[danny](https://linear.app/bytebase/profiles/danny) [tianzhou](https://linear.app/bytebase/profiles/tianzhou) FYI - subscribing you to this release note issue for visibility."
Should I post this comment? (yes/no)
Only proceed with mcp__linear__create_comment after user confirms.
IMPORTANT: Create separate comments for each owner, grouping their items together.
Git-to-Linear User Mapping:
| Git Author | Linear Name | Linear displayName |
|---|---|---|
| boojack | Steven Li | steven |
| ecmadao | Edward Lu | ed |
| h3n4l | Adrian Lam | h3n4l |
| Danny Xu | Danny Xu | danny |
| p0ny | Xzavier Zane | p0ny |
| rebelice | Jonathan Yablonski | junyi |
| Vincent Huang | Vincent Huang | vh |
| zchpeter | Peter Zhu | pz |
Mention Format: To properly @mention users in Linear comments, use a markdown link to their profile:
[displayName](https://linear.app/bytebase/profiles/displayName)
⚠️ CONFIRM WITH USER BEFORE EACH OWNER COMMENT:
Present ALL owner comments at once for batch approval:
I'll now add confirmation comments for each owner. Here are the comments I'll post:
**Comment 1 - For Steven Li (@steven):**
[steven](https://linear.app/bytebase/profiles/steven) Please confirm the following items are accurate:
**Enhancements:**
- [ ] Show issue labels in "Ready for Review" popover during Plan creation
**Bug Fixes:**
- [ ] Fix rollout date filter not working
---
**Comment 2 - For Edward Lu (@ed):**
[ed](https://linear.app/bytebase/profiles/ed) Please confirm the following items are accurate:
**Bug Fixes:**
- [ ] Fix domain change not triggering value update
---
[Continue for each owner...]
Should I post these [N] owner confirmation comments? (yes/no/edit)
Only proceed with mcp__linear__create_comment for each owner after user confirms.
After adding owner-specific confirmation comments, prepare the final approval comments.
⚠️ CONFIRM WITH USER BEFORE POSTING:
Finally, I'll add comments requesting overall release note approval:
**Comment for Adela Chen (@adela):**
[adela](https://linear.app/bytebase/profiles/adela) Please review and confirm the overall release notes are ready for publication.
**Comment for Peter Zhu (@pz):**
[pz](https://linear.app/bytebase/profiles/pz) Please review and confirm the overall release notes are ready for publication.
Should I post these final approval comments? (yes/no)
Only proceed with mcp__linear__create_comment after user confirms.
IMPORTANT: Always write the release notes draft to a file for reference and iteration.
Create the draft file at:
docs/release-notes/draft-X.Y.Z.md
The file should contain:
Example file structure:
# X.Y.Z - Month Day, Year
## Notable Changes
...
## Features
...
## Enhancements
...
## Bug Fixes
...
---
**IMPORTANT:** Before upgrading...
---
<!-- DRAFT METADATA (remove before publishing) -->
<!--
Version: X.Y.Z
Previous Version: X.Y.W
Version Type: Minor/Patch
Generated: YYYY-MM-DD
Status: Draft
## Owner Confirmation Status
| Section | Item | Owner | Confirmed |
|---------|------|-------|-----------|
| Notable Changes | ... | @owner | [ ] |
...
-->
When user provides feedback:
If user requests changes:
docs/release-notes/draft-X.Y.Z.md# Find versions
git tag --list "*3.12*" | sort -V
git branch -a | grep release/3.12
# Get commits
git log 3.12.1..origin/release/3.12.2 --oneline --decorate
# Analyze commits with author (run in parallel)
git show --stat --format='Author: %an <%ae>' <hash1>
git show --stat --format='Author: %an <%ae>' <hash2>
# Check Terraform impact
git show <hash> -- "proto/**/*.proto" | head -50
# Find owner by file changes
git log 3.12.1..origin/release/3.12.2 --format='%an' -- backend/api/ | sort | uniq -c | sort -rn
# Research format
# Use WebFetch: https://github.com/bytebase/bytebase/releases/tag/3.12.1
Situation: Writing 3.12.1 → 3.12.2 and found new features
Action:
Situation: Proto file changes field name from tier to environment_tier
Action:
tier to environment_tier (Terraform: update bytebase_environment resource configuration to use new field name environment_tier)"Input: "Customers complained about SQL editor tab caching and DDL/DML popup not showing"
Action:
Input: 5 commits all related to "SQL Editor tab management"
Action:
- SQL Editor tab management improvements including:
- Refactored state management with simplified caching logic
- Performance optimizations for tab loading and rendering
- Enhanced tab UI components
git show --stat commands simultaneouslyA good release note:
docs/release-notes/draft-X.Y.Z.md for reference and iteration<version>-<date>_release_note (after user confirmation)