What I do
- Create initial CHANGELOG.md file using Keep a Changelog format
- Extract up to 10 major features from README.md, commit history, and codebase structure
- Place all extracted entries under [Unreleased] section (no version number yet)
- Classify entries into Added or Misc based on whether they describe new capabilities or notable catch-all code changes
- Include empty sections for Changed, Deprecated, Removed, Fixed, Security, and Misc at the end
- Note adherence to Semantic Versioning for future releases
- Notify if additional important features exist beyond the top 10
- Provide guidance on moving to versioned releases later
When to use me
Use this skill when:
- Starting changelog documentation for an existing project
- Project has no CHANGELOG.md file yet
- You want to document current state before making first release
- You need a Keep a Changelog compliant starting point
Prerequisites
Required:
- Must be a git repository
- Must have main or master branch
Optional:
- README.md file (used for feature extraction if present)
Validation checks:
# Check if git repo
git rev-parse --git-dir
# Check if CHANGELOG.md already exists
[ -f CHANGELOG.md ]
Error messages:
- Not a git repo →
"Error: This skill requires a git repository for context gathering."
- CHANGELOG.md exists →
"Error: CHANGELOG.md already exists. This skill is for first-time changelog creation only."
- No main/master branch →
"Error: No main or master branch found. Please create a default branch first."
References
This skill follows:
If you need to fetch detailed information about changelog format or versioning rules during execution, use the WebFetch tool with these URLs.
Workflow
Step 1: Validate Prerequisites
# Check if git repository
git rev-parse --git-dir 2>/dev/null
If fails → error: "Error: This skill requires a git repository for context gathering."
# Check if CHANGELOG.md already exists
[ -f CHANGELOG.md ] && echo "exists" || echo "not found"
If exists → error: "Error: CHANGELOG.md already exists. This skill is for first-time changelog creation only."
Step 2: Identify Default Branch
# Detect default branch name
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'
If that fails, try:
# Check which branch exists: main or master
git show-ref --verify refs/heads/main 2>/dev/null && echo "main" || \
git show-ref --verify refs/heads/master 2>/dev/null && echo "master"
If neither exists → error: "Error: No main or master branch found. Please create a default branch first."
Step 3: Gather Context
3a. Check for README.md:
[ -f README.md ] && echo "found" || echo "not found"
If found, read README.md using Read tool and parse for:
- "Features" section
- "What it does" section
- "Capabilities" section
- Bullet lists describing functionality
- High-level feature descriptions
3b. Analyze first-parent history on main/master:
# Get first-parent commits from default branch
git log origin/main --first-parent --oneline
# or
git log origin/master --first-parent --oneline
Apply smart filtering to identify Added and Misc candidates:
Include commits with:
feat:, feature:, add:, added:, implement:, create:
- Keywords: "api", "database", "auth", "cli", "ui", "backend", "frontend", "dashboard", "integration"
refactor: only if mentions major component (e.g., "refactor: migrate to TypeScript")
- Descriptive squash-merge or PR titles that indicate code or logic changes not already covered by standard sections
Exclude commits with:
docs:, doc:, documentation:
chore:, build:, ci:, style:, format:
test: (unless adding testing framework: "add jest", "add cypress", etc.)
- Version-related: "bump", "release", "version"
- Dependencies: "update deps", "upgrade", "npm update", "yarn upgrade"
- Trivial changes: "fix typo", "update readme", "add comment", "format code"
- Generic merge subjects with no useful description (e.g., "Merge pull request #123 ...")
3c. Scan project structure:
ls -la
Look for directories indicating major features:
src/ → Core application source code
api/, backend/ → REST API or backend service
cli/, cmd/ → CLI tool
web/, frontend/, ui/ → Web interface
docker/, k8s/ → Container deployment
db/, migrations/ → Database integration
auth/ → Authentication system
docs/ → Documentation (only mention if substantial)
Step 4: Extract, Classify, and Rank Entries
Priority ranking (highest to lowest):
- Explicit features from README.md sections
- Commit messages with
feat: prefix
- Commit messages with feature-indicating keywords
- Major directory structure inferences
Deduplication logic:
- Merge similar features from different sources
- Example: "Add REST API" (commit) + "API endpoints" (README) → "RESTful API with endpoints"
- Group related commits
- Example: "Add JWT auth", "Add login endpoint", "Add user sessions" → "Authentication system with JWT"
Section classification rules:
### Added → new features, new subsystems, first-time integrations, or newly introduced user-facing capabilities
### Misc → notable merged PRs or source-code / program-logic changes that affect behavior, architecture, or maintainability but do not cleanly fit Added, Changed, Fixed, Removed, Deprecated, or Security
- Do not place docs-only, formatting-only, CI-only, or dependency-only work into
Misc
- When unsure between
Added and Misc, prefer Added only for clearly new capabilities; otherwise use Misc
Entry formatting:
- Convert to past tense if needed
- Start with capital letter
- Concise: 50-80 characters max
- Focus on user-facing or architectural significance
- Examples:
Initial project scaffolding and CLI interface
RESTful API with JWT authentication
PostgreSQL database integration with migrations
Docker deployment configuration
Web-based admin dashboard
Real-time WebSocket notifications
Comprehensive test suite with 80% coverage
CI/CD pipeline with GitHub Actions
API documentation with OpenAPI/Swagger
Role-based access control (RBAC)
Feature selection:
- Select top 10 most significant features based on ranking
- If fewer than 10 candidates found, include all
- If more than 10 candidates found:
- Keep top 10 in CHANGELOG
- Note 2-3 examples of additional features for user review
Balance the selected entries across ### Added and ### Misc based on classification. ### Misc may remain empty if no suitable catch-all code changes are found.
Step 5: Generate CHANGELOG.md
Template structure:
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- [Feature 1]
- [Feature 2]
- [Feature 3]
- [Feature 4]
- [Feature 5]
- [Feature 6]
- [Feature 7]
- [Feature 8]
- [Feature 9]
- [Feature 10]
### Changed
### Deprecated
### Removed
### Fixed
### Security
### Misc
Rules:
- All features go under
## [Unreleased] section
- No version number or date yet
- Keep empty sections (Changed, Deprecated, Removed, Fixed, Security, Misc) present
- Place each extracted entry in either
### Added or ### Misc with - bullet format
- Use
### Misc only for notable code or logic changes and merged PRs that do not fit the standard Keep a Changelog sections
Step 6: Write CHANGELOG.md
Use the Write tool to create the file at project root:
# File path: ./CHANGELOG.md
Step 7: User Confirmation
Standard success message:
✓ Created CHANGELOG.md with [N] entries under [Unreleased]
- File location: CHANGELOG.md
- Included `### Misc` for notable code changes that do not fit standard Keep a Changelog sections
- Future versions will follow Semantic Versioning
Next steps:
- Review and edit CHANGELOG.md if needed
- Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"
- When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])
With overflow notification (>10 features found):
✓ Created CHANGELOG.md with 10 entries under [Unreleased]
- Note: Found [X] additional potential entries. Consider reviewing commits for:
• [Feature example 1]
• [Feature example 2]
• [Feature example 3]
Next steps:
- Review CHANGELOG.md and add any missing important features
- Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"
- When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])
Low feature count (0-2 features):
✓ Created CHANGELOG.md with [N] entr(y/ies) under [Unreleased]
- Note: Limited entries detected from project analysis. You may want to manually edit CHANGELOG.md to add more details.
Next steps:
- Review CHANGELOG.md and add missing features
- Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"
- When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])
Feature Extraction Strategy
README.md Parsing
Look for these section headers (case-insensitive):
## Features
## What it does
## Capabilities
## About
## Overview
Extract bullet points or numbered lists from these sections. Each item becomes a feature candidate.
Commit Message Patterns
High-priority patterns (strong feature indicators):
feat: or feature: prefix
add: or added: prefix
implement: or create: prefix
- Contains: "initial", "scaffold", "setup", "introduce"
Medium-priority patterns (contextual features):
- Contains architectural keywords: "api", "database", "auth", "authentication", "authorization"
- Contains component keywords: "cli", "ui", "dashboard", "admin", "backend", "frontend"
- Contains integration keywords: "docker", "kubernetes", "postgres", "redis", "websocket"
- Contains workflow keywords: "ci/cd", "pipeline", "deployment", "migration"
Refinement rules:
- Group commits by topic (e.g., all auth-related commits → single "Authentication system" feature)
- Ignore micro-commits (e.g., "fix lint error", "remove console.log")
- Prioritize commits near repository start (foundational features)
- Treat descriptive squash-merge titles as valid candidates for
### Misc when they represent notable source changes without a cleaner standard section
Directory Structure Inference
Map directories to feature descriptions:
src/ → "Core application source code"
api/, backend/, server/ → "Backend API server"
cli/, cmd/ → "Command-line interface"
web/, frontend/, client/, ui/ → "Web user interface"
docker/, Dockerfile → "Docker containerization"
k8s/, kubernetes/ → "Kubernetes deployment"
db/, database/, migrations/ → "Database layer with migrations"
auth/, authentication/ → "Authentication system"
docs/, documentation/ → "Project documentation" (only if substantial)
tests/, __tests__/ → "Test suite" (only if comprehensive)
Edge Cases
| Scenario |
Behavior |
| CHANGELOG.md exists |
Error: "CHANGELOG.md already exists. This skill is for first-time changelog creation only." |
| Not a git repository |
Error: "This skill requires a git repository for context gathering." |
| No main or master branch |
Error: "No main or master branch found. Please create a default branch first." |
| README.md not found |
Proceed with commits + directory structure analysis only |
| No commits on main/master |
Use directory structure + notify: "No commit history found. Created minimal CHANGELOG.md based on project structure. Please edit manually to add entries." |
| Empty repository (no files) |
Notify: "Empty repository detected. Created template CHANGELOG.md with no features. Please edit manually." |
| 0 entries extracted |
Create CHANGELOG with empty Added and Misc sections + notify: "No notable code changes detected. Please manually edit CHANGELOG.md to add your project's entries." |
| 1-2 entries extracted |
Include all + notify: "Limited entries detected. You may want to manually edit CHANGELOG.md to add more details." |
| Exactly 10 entries |
Include all, no overflow notification |
| More than 10 entries |
Include top 10 + notify with 2-3 examples of additional entries |
Complete Workflow Example
Scenario: Project with README, 150 commits, and typical web app structure
Validation:
git rev-parse --git-dir
# ✓ Valid git repo
[ -f CHANGELOG.md ]
# ✓ Does not exist, can proceed
Branch detection:
git symbolic-ref refs/remotes/origin/HEAD
# refs/remotes/origin/main
# ✓ Using 'main' branch
README analysis:
- Found
## Features section with 6 items:
- User authentication and authorization
- RESTful API with OpenAPI docs
- PostgreSQL database
- React frontend
- Docker deployment
- CI/CD with GitHub Actions
Commit analysis (150 first-parent commits):
- Filter to 42 feature-related commits
- Grouped into topics:
- Authentication (8 commits) → "Authentication system with JWT and OAuth"
- API (15 commits) → "RESTful API with OpenAPI documentation"
- Database (6 commits) → "PostgreSQL database with Prisma ORM"
- Frontend (10 commits) → "React-based web interface with Material-UI"
- Testing (3 commits) → "Comprehensive test suite with Jest and Cypress"
- Deployment (5 commits) → "Docker containerization and Kubernetes deployment"
- CI/CD (4 commits) → "CI/CD pipeline with GitHub Actions"
- WebSocket (3 commits) → "Real-time notifications via WebSocket"
- Monitoring (2 commits) → "Application monitoring with Prometheus"
Directory structure:
api/ → Backend API
web/ → Frontend
docker/ → Container support
k8s/ → Kubernetes configs
db/ → Database migrations
Entry ranking and selection:
- Deduplicated and merged sources
- Top 10 selected:
- Authentication system with JWT and OAuth
- RESTful API with OpenAPI documentation
- PostgreSQL database with Prisma ORM
- React-based web interface with Material-UI
- Real-time notifications via WebSocket
- Docker containerization and Kubernetes deployment
- CI/CD pipeline with GitHub Actions
- Comprehensive test suite with Jest and Cypress
- Application monitoring with Prometheus
- Major internal permissions refactor (Misc)
Overflow detection:
- Found 2 additional features:
- Email notification system
- API rate limiting
Write CHANGELOG.md with selected entries split between ### Added and ### Misc
User notification:
✓ Created CHANGELOG.md with 10 features under [Unreleased]
- Note: Found 2 additional potential features. Consider reviewing commits for:
• Email notification system
• API rate limiting
Next steps:
- Review CHANGELOG.md and add any missing important features
- Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"
- When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])
1---2name: make-changelog3description: Create initial CHANGELOG.md with unreleased features using Keep a Changelog format4license: MIT5---67## What I do89- Create initial CHANGELOG.md file using Keep a Changelog format10- Extract up to 10 major features from README.md, commit history, and codebase structure11- Place all extracted entries under [Unreleased] section (no version number yet)12- Classify entries into Added or Misc based on whether they describe new capabilities or notable catch-all code changes13- Include empty sections for Changed, Deprecated, Removed, Fixed, Security, and Misc at the end14- Note adherence to Semantic Versioning for future releases15- Notify if additional important features exist beyond the top 1016- Provide guidance on moving to versioned releases later1718## When to use me1920Use this skill when:21- Starting changelog documentation for an existing project22- Project has no CHANGELOG.md file yet23- You want to document current state before making first release24- You need a Keep a Changelog compliant starting point2526## Prerequisites2728**Required:**29- Must be a git repository30- Must have main or master branch3132**Optional:**33- README.md file (used for feature extraction if present)3435**Validation checks:**36```bash37# Check if git repo38git rev-parse --git-dir3940# Check if CHANGELOG.md already exists41[ -f CHANGELOG.md ]42```4344**Error messages:**45- Not a git repo → `"Error: This skill requires a git repository for context gathering."`46- CHANGELOG.md exists → `"Error: CHANGELOG.md already exists. This skill is for first-time changelog creation only."`47- No main/master branch → `"Error: No main or master branch found. Please create a default branch first."`4849## References5051This skill follows:52- **Keep a Changelog**: https://keepachangelog.com/en/1.1.0/53- **Semantic Versioning**: https://semver.org/spec/v2.0.0.html5455If you need to fetch detailed information about changelog format or versioning rules during execution, use the WebFetch tool with these URLs.5657## Workflow5859### Step 1: Validate Prerequisites6061```bash62# Check if git repository63git rev-parse --git-dir 2>/dev/null64```65If fails → error: "Error: This skill requires a git repository for context gathering."6667```bash68# Check if CHANGELOG.md already exists69[ -f CHANGELOG.md ] && echo "exists" || echo "not found"70```71If exists → error: "Error: CHANGELOG.md already exists. This skill is for first-time changelog creation only."7273### Step 2: Identify Default Branch7475```bash76# Detect default branch name77git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'78```7980If that fails, try:81```bash82# Check which branch exists: main or master83git show-ref --verify refs/heads/main 2>/dev/null && echo "main" || \84git show-ref --verify refs/heads/master 2>/dev/null && echo "master"85```8687If neither exists → error: "Error: No main or master branch found. Please create a default branch first."8889### Step 3: Gather Context9091**3a. Check for README.md:**92```bash93[ -f README.md ] && echo "found" || echo "not found"94```9596If found, read README.md using Read tool and parse for:97- "Features" section98- "What it does" section99- "Capabilities" section100- Bullet lists describing functionality101- High-level feature descriptions102103**3b. Analyze first-parent history on main/master:**104```bash105# Get first-parent commits from default branch106git log origin/main --first-parent --oneline107# or108git log origin/master --first-parent --oneline109```110111Apply smart filtering to identify Added and Misc candidates:112113**Include commits with:**114- `feat:`, `feature:`, `add:`, `added:`, `implement:`, `create:`115- Keywords: "api", "database", "auth", "cli", "ui", "backend", "frontend", "dashboard", "integration"116- `refactor:` only if mentions major component (e.g., "refactor: migrate to TypeScript")117- Descriptive squash-merge or PR titles that indicate code or logic changes not already covered by standard sections118119**Exclude commits with:**120- `docs:`, `doc:`, `documentation:`121- `chore:`, `build:`, `ci:`, `style:`, `format:`122- `test:` (unless adding testing framework: "add jest", "add cypress", etc.)123- Version-related: "bump", "release", "version"124- Dependencies: "update deps", "upgrade", "npm update", "yarn upgrade"125- Trivial changes: "fix typo", "update readme", "add comment", "format code"126- Generic merge subjects with no useful description (e.g., "Merge pull request #123 ...")127128**3c. Scan project structure:**129```bash130ls -la131```132133Look for directories indicating major features:134- `src/` → Core application source code135- `api/`, `backend/` → REST API or backend service136- `cli/`, `cmd/` → CLI tool137- `web/`, `frontend/`, `ui/` → Web interface138- `docker/`, `k8s/` → Container deployment139- `db/`, `migrations/` → Database integration140- `auth/` → Authentication system141- `docs/` → Documentation (only mention if substantial)142143### Step 4: Extract, Classify, and Rank Entries144145**Priority ranking (highest to lowest):**1461. Explicit features from README.md sections1472. Commit messages with `feat:` prefix1483. Commit messages with feature-indicating keywords1494. Major directory structure inferences150151**Deduplication logic:**152- Merge similar features from different sources153 - Example: "Add REST API" (commit) + "API endpoints" (README) → "RESTful API with endpoints"154- Group related commits155 - Example: "Add JWT auth", "Add login endpoint", "Add user sessions" → "Authentication system with JWT"156157**Section classification rules:**158- `### Added` → new features, new subsystems, first-time integrations, or newly introduced user-facing capabilities159- `### Misc` → notable merged PRs or source-code / program-logic changes that affect behavior, architecture, or maintainability but do not cleanly fit `Added`, `Changed`, `Fixed`, `Removed`, `Deprecated`, or `Security`160- Do not place docs-only, formatting-only, CI-only, or dependency-only work into `Misc`161- When unsure between `Added` and `Misc`, prefer `Added` only for clearly new capabilities; otherwise use `Misc`162163**Entry formatting:**164- Convert to past tense if needed165- Start with capital letter166- Concise: 50-80 characters max167- Focus on user-facing or architectural significance168- Examples:169 - `Initial project scaffolding and CLI interface`170 - `RESTful API with JWT authentication`171 - `PostgreSQL database integration with migrations`172 - `Docker deployment configuration`173 - `Web-based admin dashboard`174 - `Real-time WebSocket notifications`175 - `Comprehensive test suite with 80% coverage`176 - `CI/CD pipeline with GitHub Actions`177 - `API documentation with OpenAPI/Swagger`178 - `Role-based access control (RBAC)`179180**Feature selection:**181- Select top 10 most significant features based on ranking182- If fewer than 10 candidates found, include all183- If more than 10 candidates found:184 - Keep top 10 in CHANGELOG185 - Note 2-3 examples of additional features for user review186187Balance the selected entries across `### Added` and `### Misc` based on classification. `### Misc` may remain empty if no suitable catch-all code changes are found.188189### Step 5: Generate CHANGELOG.md190191**Template structure:**192```markdown193# Changelog194195All notable changes to this project will be documented in this file.196197The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),198and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).199200## [Unreleased]201202### Added203- [Feature 1]204- [Feature 2]205- [Feature 3]206- [Feature 4]207- [Feature 5]208- [Feature 6]209- [Feature 7]210- [Feature 8]211- [Feature 9]212- [Feature 10]213214### Changed215216### Deprecated217218### Removed219220### Fixed221222### Security223224### Misc225```226227**Rules:**228- All features go under `## [Unreleased]` section229- No version number or date yet230- Keep empty sections (Changed, Deprecated, Removed, Fixed, Security, Misc) present231- Place each extracted entry in either `### Added` or `### Misc` with `- ` bullet format232- Use `### Misc` only for notable code or logic changes and merged PRs that do not fit the standard Keep a Changelog sections233234### Step 6: Write CHANGELOG.md235236Use the Write tool to create the file at project root:237```bash238# File path: ./CHANGELOG.md239```240241### Step 7: User Confirmation242243**Standard success message:**244```245✓ Created CHANGELOG.md with [N] entries under [Unreleased]246 - File location: CHANGELOG.md247 - Included `### Misc` for notable code changes that do not fit standard Keep a Changelog sections248 - Future versions will follow Semantic Versioning249250Next steps:251 - Review and edit CHANGELOG.md if needed252 - Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"253 - When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])254```255256**With overflow notification (>10 features found):**257```258✓ Created CHANGELOG.md with 10 entries under [Unreleased]259 - Note: Found [X] additional potential entries. Consider reviewing commits for:260 • [Feature example 1]261 • [Feature example 2]262 • [Feature example 3]263264Next steps:265 - Review CHANGELOG.md and add any missing important features266 - Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"267 - When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])268```269270**Low feature count (0-2 features):**271```272✓ Created CHANGELOG.md with [N] entr(y/ies) under [Unreleased]273 - Note: Limited entries detected from project analysis. You may want to manually edit CHANGELOG.md to add more details.274275Next steps:276 - Review CHANGELOG.md and add missing features277 - Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"278 - When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])279```280281## Feature Extraction Strategy282283### README.md Parsing284285Look for these section headers (case-insensitive):286- `## Features`287- `## What it does`288- `## Capabilities`289- `## About`290- `## Overview`291292Extract bullet points or numbered lists from these sections. Each item becomes a feature candidate.293294### Commit Message Patterns295296**High-priority patterns (strong feature indicators):**297- `feat: ` or `feature: ` prefix298- `add: ` or `added: ` prefix299- `implement: ` or `create: ` prefix300- Contains: "initial", "scaffold", "setup", "introduce"301302**Medium-priority patterns (contextual features):**303- Contains architectural keywords: "api", "database", "auth", "authentication", "authorization"304- Contains component keywords: "cli", "ui", "dashboard", "admin", "backend", "frontend"305- Contains integration keywords: "docker", "kubernetes", "postgres", "redis", "websocket"306- Contains workflow keywords: "ci/cd", "pipeline", "deployment", "migration"307308**Refinement rules:**309- Group commits by topic (e.g., all auth-related commits → single "Authentication system" feature)310- Ignore micro-commits (e.g., "fix lint error", "remove console.log")311- Prioritize commits near repository start (foundational features)312- Treat descriptive squash-merge titles as valid candidates for `### Misc` when they represent notable source changes without a cleaner standard section313314### Directory Structure Inference315316Map directories to feature descriptions:317- `src/` → "Core application source code"318- `api/`, `backend/`, `server/` → "Backend API server"319- `cli/`, `cmd/` → "Command-line interface"320- `web/`, `frontend/`, `client/`, `ui/` → "Web user interface"321- `docker/`, `Dockerfile` → "Docker containerization"322- `k8s/`, `kubernetes/` → "Kubernetes deployment"323- `db/`, `database/`, `migrations/` → "Database layer with migrations"324- `auth/`, `authentication/` → "Authentication system"325- `docs/`, `documentation/` → "Project documentation" (only if substantial)326- `tests/`, `__tests__/` → "Test suite" (only if comprehensive)327328## Edge Cases329330| Scenario | Behavior |331|----------|----------|332| CHANGELOG.md exists | Error: "CHANGELOG.md already exists. This skill is for first-time changelog creation only." |333| Not a git repository | Error: "This skill requires a git repository for context gathering." |334| No main or master branch | Error: "No main or master branch found. Please create a default branch first." |335| README.md not found | Proceed with commits + directory structure analysis only |336| No commits on main/master | Use directory structure + notify: "No commit history found. Created minimal CHANGELOG.md based on project structure. Please edit manually to add entries." |337| Empty repository (no files) | Notify: "Empty repository detected. Created template CHANGELOG.md with no features. Please edit manually." |338| 0 entries extracted | Create CHANGELOG with empty Added and Misc sections + notify: "No notable code changes detected. Please manually edit CHANGELOG.md to add your project's entries." |339| 1-2 entries extracted | Include all + notify: "Limited entries detected. You may want to manually edit CHANGELOG.md to add more details." |340| Exactly 10 entries | Include all, no overflow notification |341| More than 10 entries | Include top 10 + notify with 2-3 examples of additional entries |342343## Complete Workflow Example344345**Scenario:** Project with README, 150 commits, and typical web app structure3463471. **Validation:**348 ```bash349 git rev-parse --git-dir350 # ✓ Valid git repo351352 [ -f CHANGELOG.md ]353 # ✓ Does not exist, can proceed354 ```3553562. **Branch detection:**357 ```bash358 git symbolic-ref refs/remotes/origin/HEAD359 # refs/remotes/origin/main360 # ✓ Using 'main' branch361 ```3623633. **README analysis:**364 - Found `## Features` section with 6 items:365 - User authentication and authorization366 - RESTful API with OpenAPI docs367 - PostgreSQL database368 - React frontend369 - Docker deployment370 - CI/CD with GitHub Actions3713724. **Commit analysis (150 first-parent commits):**373 - Filter to 42 feature-related commits374 - Grouped into topics:375 - Authentication (8 commits) → "Authentication system with JWT and OAuth"376 - API (15 commits) → "RESTful API with OpenAPI documentation"377 - Database (6 commits) → "PostgreSQL database with Prisma ORM"378 - Frontend (10 commits) → "React-based web interface with Material-UI"379 - Testing (3 commits) → "Comprehensive test suite with Jest and Cypress"380 - Deployment (5 commits) → "Docker containerization and Kubernetes deployment"381 - CI/CD (4 commits) → "CI/CD pipeline with GitHub Actions"382 - WebSocket (3 commits) → "Real-time notifications via WebSocket"383 - Monitoring (2 commits) → "Application monitoring with Prometheus"3843855. **Directory structure:**386 ```387 api/ → Backend API388 web/ → Frontend389 docker/ → Container support390 k8s/ → Kubernetes configs391 db/ → Database migrations392 ```3933946. **Entry ranking and selection:**395 - Deduplicated and merged sources396 - Top 10 selected:397 1. Authentication system with JWT and OAuth398 2. RESTful API with OpenAPI documentation399 3. PostgreSQL database with Prisma ORM400 4. React-based web interface with Material-UI401 5. Real-time notifications via WebSocket402 6. Docker containerization and Kubernetes deployment403 7. CI/CD pipeline with GitHub Actions404 8. Comprehensive test suite with Jest and Cypress405 9. Application monitoring with Prometheus406 10. Major internal permissions refactor (Misc)4074087. **Overflow detection:**409 - Found 2 additional features:410 - Email notification system411 - API rate limiting4124138. **Write CHANGELOG.md** with selected entries split between `### Added` and `### Misc`4144159. **User notification:**416 ```417 ✓ Created CHANGELOG.md with 10 features under [Unreleased]418 - Note: Found 2 additional potential features. Consider reviewing commits for:419 • Email notification system420 • API rate limiting421422 Next steps:423 - Review CHANGELOG.md and add any missing important features424 - Commit: git add CHANGELOG.md && git commit -m "docs: add initial changelog"425 - When ready to release, move [Unreleased] items to a versioned section (e.g., [0.1.0])426 ```