update-changelog
Creates or updates CHANGELOG.md following the Keep a Changelog 1.1.0 format. Use this skill when the user asks to "update the changelog", "generate changelog", "add changelog entry", "create CHANGELOG.md", "sync changelog with tags", or wants to document project changes based on git tags and commit history.
What this skill does
# Update Changelog Create or update CHANGELOG.md following the [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) format, using git tags as version boundaries. ## Process ### 1. Gather git tag and remote info Run these commands to understand the project's release history: ```bash git tag --sort=-v:refname git log --oneline --decorate git remote get-url origin ``` Collect: - All tags sorted by version (descending). Both `v1.0.0` and `1.0.0` prefixes are valid -- detect which convention the project uses and stay consistent. - The remote URL to construct diff comparison links. - The hosting platform (GitHub, GitLab, Bitbucket) to pick the correct comparison URL pattern. If no tags exist, inform the user and generate only an `[Unreleased]` section from the full commit history. ### 2. Check for existing CHANGELOG.md Look for `CHANGELOG.md` (case-insensitive) in the project root. - **Exists**: Read it. Preserve any hand-written content. Only add or update version sections that are missing or incomplete. - **Does not exist**: Create a new file from scratch. ### 3. Build version sections from git history For each pair of adjacent tags (newest to oldest), extract commits with their full messages: ```bash git log --format="%h %s%n%b" <older-tag>..<newer-tag> ``` For the oldest tag: ```bash git log --format="%h %s%n%b" <oldest-tag> ``` For unreleased changes (commits after the latest tag): ```bash git log --format="%h %s%n%b" <latest-tag>..HEAD ``` Get the tag date for each version: ```bash git log -1 --format=%ai <tag> ``` ### 4. Synthesize meaningful changelog entries Do NOT copy commit messages verbatim. Changelogs are for humans -- readers who care about what changed and why, not how the code was modified. Analyze the full commit messages gathered in step 3 (subject lines and bodies) to understand the intent and impact of each change. Group related commits into logical changes. Multiple commits that together implement one feature become a single entry. A refactor that splits one file into three is one change, not three. Classify each logical change into exactly one category (in this order of precedence): | Category | What belongs here | |----------|-------------------| | **Added** | New capabilities users can now do | | **Changed** | Existing behavior that now works differently | | **Deprecated** | Capabilities that will be removed in a future version | | **Removed** | Capabilities that no longer exist | | **Fixed** | Broken behavior that now works correctly | | **Security** | Vulnerabilities that have been addressed | Omit changes with no user-facing impact (internal refactors, CI tweaks, test additions, doc typo fixes) unless they substantially affect the development experience for contributors. Write each entry as a clear, meaningful description: - Describe **what the user can now do** or **what changed for them**, not what files were touched. - Provide enough context that a reader unfamiliar with the codebase understands the significance. - Consolidate: 5 commits fixing the same parser become one entry like "Fix CSV parser failing on quoted fields with newlines". - One entry per line, prefixed with `- `. **Bad** (git log copy-paste): ``` - Update auth middleware - Fix bug in login - Refactor token validation ``` **Good** (meaningful for readers): ``` - Session tokens now refresh automatically 5 minutes before expiry, eliminating unexpected logouts during long sessions - Fix login failing silently when the email contains uppercase characters ``` ### 5. Assemble the changelog Follow this exact structure. See `references/keepachangelog-format.md` for the full format specification. ```markdown # 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] ## [x.y.z] - YYYY-MM-DD ### Added - Entry ### Fixed - Entry [Unreleased]: https://github.com/owner/repo/compare/vx.y.z...HEAD [x.y.z]: https://github.com/owner/repo/compare/vPREV...vx.y.z ``` Rules: - Versions in reverse chronological order (newest first). - Dates in ISO 8601 format (`YYYY-MM-DD`). - Omit empty categories -- only include categories that have entries. - The `[Unreleased]` section is always present, even if empty. - Footer contains comparison links for every version. - The first (oldest) release links to its tag, not a comparison. ### 6. Write the file Write CHANGELOG.md to the project root. After writing, briefly confirm what was generated (number of versions, notable entries). ## Updating an existing changelog When CHANGELOG.md already exists: 1. Parse existing version sections and their entries. 2. Identify tags not yet represented in the changelog. 3. Add only missing version sections in the correct chronological position. 4. Refresh the `[Unreleased]` section with commits after the latest tag. 5. Update footer diff links to include all versions. 6. Preserve any hand-edited entries in existing version sections -- do not overwrite them. ## References - `references/keepachangelog-format.md` -- Full format specification and diff link patterns
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.