| name | tonic-ui-pr |
| description | Generate PR descriptions and changeset entries. Use when the user mentions "PR", "pull request", "PR description", "changeset", provides a diff or describes code changes, or asks to draft a merge request. Also trigger for conventional commit message generation. |
PR Description Generator
Generate well-structured PR descriptions following conventional commits and tonic-ui project conventions. Based on analysis of 885 commits and 721 PRs.
Pre-Work Checklist
CRITICAL: Always complete these steps BEFORE writing PR descriptions
Run these commands in parallel:
git status
git diff HEAD
git log --oneline -10
For efficiency: Make all three Bash tool calls in a single message since they're independent.
Scope Rules
| Allowed | NOT Allowed |
|---|
| Generate PR titles and descriptions | Modify source code |
| Create changeset files for monorepos | Create changesets for non-monorepo projects |
| Draft commit messages | Automatically commit or push changes |
| Review and summarize diffs | Add features or fix bugs |
If asked to create a changeset for a non-monorepo project, explain that changesets are only used in Tonic UI and Tonic One monorepos.
PR Title Format
Follow conventional commits:
<type>(<scope>): <short description>
Formatting rules:
- Lowercase first letter after type/scope (87% convention)
- Under 72 characters
- No period at end
- Wrap component/prop/package names in backticks (34% of PRs do this)
Types (by frequency in this repo):
| Type | Usage | % |
|---|
feat | New features, components, props | 38% |
docs | Documentation changes | 16% |
fix | Bug fixes | 15% |
chore | Dependencies, releases, tooling | 14% |
refactor | Code restructuring, no behavior change | 5% |
ci | CI/CD changes | 2% |
breaking | Breaking changes (repo-specific type) | 2% |
test | Test additions/changes | <1% |
build | Build system changes | <1% |
style | Formatting, whitespace | <1% |
revert | Reverting previous changes | <1% |
Important — breaking as a type: This repo historically uses breaking: as a standalone type prefix (15 PRs), NOT the conventional feat!: notation. Only 1 PR uses the ! marker.
breaking: deprecate the rarely used FlatButton component
breaking: deprecate the second argument of CheckboxGroup onChange callback
feat(react/date-pickers)!: deprecate Calendar and replace it with DateCalendar ← only 1 uses !
Scope conventions:
| Format | Example | Notes |
|---|
package/component | react/menu, react/scrollbar, react/tag | Current convention (recent trend) |
| Package name | react, styled-system, utils, react-hooks | For package-wide changes |
| No scope | feat: add X component | Acceptable for cross-cutting changes |
Common scopes: react/menu, react/table, react/scrollbar, react/checkbox, react/toast, react/date-pickers, styled-system, utils, react-hooks, react-icons, theme
Cross-repo references: When porting changes from/to Tonic One, include [tonic-one-pr-NNN] in the title.
Examples:
feat(react/scrollbar): add `scrollViewProps` to enable passing custom props
fix(react/menu): correct focus management on keyboard navigation
refactor(styled-system): migrate to semantic color tokens
docs: update `Table` component examples
chore(deps): bump webpack from 5.88.0 to 5.89.0
breaking: deprecate the `FlatButton` component
revert(react/InputGroup): restore pseudo-class styling
PR Body Template
Based on the actual patterns used in recent PRs (not a generic template):
## Summary
Closes #ISSUE_NUMBER (if applicable)
Brief 1-3 sentence description of the change.
Demo: https://trendmicro-frontend.github.io/tonic-ui-demo/react/pr-{PR_NUMBER}/components/{COMPONENT}/
## Changes
- **Component/File**: Description of change
- **Component/File**: Description of change
## Motivation
Why this change was needed. (Optional — include for non-trivial changes)
## Migration
Before/after code examples showing migration path. (Only for breaking changes)
Section usage guide:
## Summary — Always include. 1-3 sentences + optional demo link + optional Closes #NNN
## Changes — Always include for multi-file changes. Bullet list of what changed where.
## Motivation — Include when the "why" isn't obvious from the summary
## Migration — Only for breaking changes. Show before/after code examples.
Demo links: ~48% of PRs include a demo link. Format:
https://trendmicro-frontend.github.io/tonic-ui-demo/react/pr-{PR_NUMBER}/components/{COMPONENT}/
https://trendmicro-frontend.github.io/tonic-ui-demo/react/pr-{PR_NUMBER}/hooks/{HOOK_NAME}/
Issue references:
Closes #NNN or Close #NNN — for GitHub issues (~10% of PRs)
Related PR: #NNN or Depends on: #NNN — for PR dependencies (~2% of PRs)
What NOT to include:
## Testing section — never used in this repo
- Jira ticket references (
TVO-XXXX, V1E-XXXX) — not used in this repo
- Figma links — only ~4% of PRs, include only if the user provides one
Changeset Entries
When the change affects a publishable package, generate a changeset file.
File Naming Convention
.changeset/tonic-ui-pr-{PR_NUMBER}.md
For multiple changesets on the same PR, use suffixes:
.changeset/tonic-ui-pr-943a.md
.changeset/tonic-ui-pr-943b.md
Or descriptive suffixes:
.changeset/tonic-ui-pr-987-modal-regression.md
.changeset/tonic-ui-pr-987-react-hooks.md
Changeset Format
---
"@tonic-ui/react": minor
---
feat(react/scrollbar): add `scrollViewProps` to enable passing custom props to the `ScrollView`
Description rules:
- Always single line
- Use conventional commit format matching the PR title
- Wrap component/prop names in backticks
- ~75 characters average length
- This description becomes the changelog entry
Bump Rules
| Bump | When | Frequency |
|---|
patch | Bug fixes, refactoring, styling corrections, internal improvements | 56% |
minor | New components, new props, new hooks, new features | 42% |
major | Breaking API changes (extremely rare) | 2% |
Package Names (by frequency)
| Package | Changeset Frequency |
|---|
@tonic-ui/react | 66% (most common) |
@tonic-ui/styled-system | 6% |
@tonic-ui/react-hooks | 6% |
@tonic-ui/utils | 5% |
@tonic-ui/react-icons | 5% |
@tonic-ui/react-base | 5% |
@tonic-ui/theme | 2% |
Tonic One packages: @tonic-one/react, @tonic-one/react-icons, @tonic-one/react-hooks, @tonic-one/react-data-grid
Never create changesets for: codemod, changelog-github, react-docs (internal/dev packages)
Single vs Multi-Package
- Single-package changesets are the norm (86%)
- Multi-package only when the change genuinely spans package boundaries:
- Cross-cutting infrastructure (e.g., React 19 compat across
react, react-base, react-hooks)
- Feature with utility dependency (e.g., component +
utils)
- Bug fix spanning hook + component (e.g.,
react-hooks + react)
Changeset Configuration
- Config:
.changeset/config.json
- Base branch:
v2 (not master)
- Release PR title:
chore(release): version packages
- Release workflow: Automated via
.github/workflows/changesets-release.yml on push to v2
Workflow: Diff → PR Description
Step 1: Analyze Changes (Use parallel tool calls)
git status
git diff HEAD
git log --oneline -10
Step 2: Classify the Change
Identify:
- Type: feat/fix/refactor/docs/chore/ci/breaking/test/build/style/revert
- Scope: From file paths (e.g.,
react/button, react-hooks/useColorMode, theme)
- Breaking changes: API changes, removed features, behavior changes
- Affected packages: Which packages in the monorepo are impacted
Step 3: Write PR Content
Generate:
- PR Title — Following conventional commits format
- PR Body — Using the template above
- Changeset — With correct file name, package, bump type, and description
Step 4: Verify Quality
Post-Generation Checklist:
Common Mistakes to Avoid
Vague PR titles:
fix: fix bug ← too vague
feat: add feature ← too vague
fix: fix the issue with the component ← redundant "fix: fix"
Specific PR titles:
fix(react/scrollbar): prevent scroll jump on content update
feat(react/table): add sticky header support with `stickyHeader` prop
Wrong PR body template:
## What Changed ← wrong, use "## Summary"
## Why ← wrong, use "## Motivation"
## How ← wrong, use "## Changes"
## Testing ← not used in this repo
## Related
- Jira: TVO-XXXX ← not used in this repo
Wrong changeset file name:
.changeset/fuzzy-pots-clap.md ← auto-generated name, don't use
.changeset/tonic-ui-943.md ← old convention
.changeset/tonic-ui-pr-943.md ← correct current convention
Label Conventions
PRs in this repo use labels with the following conventions:
| Label | Usage |
|---|
feature (enhancement) | New features |
bug | Bug fixes |
documentation | Docs changes |
refactor (improvement) | Refactoring |
breaking change | Breaking changes |
build (ci/cd) | CI/CD changes |
dependencies | Dependency updates |
work in progress | Draft/WIP PRs |
review required | Ready for review |
Review effort [1-5]: N | Review complexity rating |