changelog:update
This skill should be used when the user asks to "update the changelog", "add to the changelog", "changelog for new release", "update CHANGELOG.md", or when the main changelog skill detects an existing CHANGELOG.md file. Appends new version entries by analyzing commits since the last documented version.
What this skill does
# Update Changelog Update an existing `CHANGELOG.md` with new entries by analyzing commits since the last documented version. Follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) with [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Reasoning Discipline This task involves multi-step reasoning across many commits: read each commit message, infer the user-facing impact, choose a category, and synthesize related commits into a single bullet. Think carefully through each commit before writing — do not fall back to keyword-only classification or verbatim copying of commit messages. ## Concision Target Calibrate output to these exact shapes. Do not exceed them. - **One bullet:** ≤15 words, one sentence, past tense, capitalized first word, ends with a period. - **One category:** 2–5 bullets. If a category would have >5 bullets, merge related ones until ≤5. - **One version section:** 2–5 populated category headings. Omit any category with zero bullets. - **Whole output:** a reader should scan the new section in under 30 seconds. ### Preferred bullet examples > - Added OAuth 2.0 login with Google and GitHub providers. > - Fixed crash when uploading files larger than 2GB. > - Reduced dashboard load time by 40%. > - **BREAKING:** Removed `/api/v1/users`. Migrate to `/api/v2/users`. ### Preferred new-version section example ```markdown ## [1.3.0] - 2026-04-19 ### Added - OAuth 2.0 login with Google and GitHub providers. ### Fixed - Fixed crash when uploading files larger than 2GB. ``` ## Workflow ### Step 1: Read Existing Changelog Read `CHANGELOG.md` from the project root (case-insensitive: also check `changelog.md`, `Changelog.md`). Parse to determine: - **Latest documented version** — The most recent `## [X.Y.Z]` heading that is **not** marked `[YANKED]`. A yanked version is not a valid boundary because its release was withdrawn; skip it and use the next non-yanked version above it. - **Any `[YANKED]` markers present?** — Record their positions so you preserve them untouched. - **Has `[Unreleased]` section?** — Note its position and any existing bullets. - **Has version links section?** — Note its position at the bottom. ### Step 2: Find the Boundary Commit The boundary commit is the last commit already documented in the changelog. Everything after it is new. **Strategy (try in order until one succeeds):** 1. **Tag match** — If the latest documented version (e.g., `1.2.0`) has a corresponding git tag (`v1.2.0` or `1.2.0`), use that tag as the boundary: `git log <tag>..HEAD`. 2. **Date match** — If no tag matches, use the release date from the version heading (`## [1.2.0] - 2026-03-15`) and find commits after that date: `git log --after="2026-03-15"`. 3. **Content match** — As a last resort, search the git log for a commit message that corresponds to a notable entry in the latest version section, and use that commit as the boundary. If none of these strategies produce a clear boundary, inform the user and ask which commit to start from. ### Step 3: Gather New Commits Run these commands in parallel: ```bash git tag --sort=-version:refname # All tags, newest first git log --oneline --date=short --format="%h %ad %s" <boundary>..HEAD # Commits since boundary git remote get-url origin 2>/dev/null # Remote URL for version links ``` Determine: - **New tags since boundary?** — Create one section per new tag. - **Untagged commits after latest tag?** — Add them to `[Unreleased]`. - **No new commits?** — **Stop here.** Do not modify the file. Inform the user: "CHANGELOG.md is already up to date — no new commits found since version X.Y.Z (YYYY-MM-DD)." ### Step 4: Analyze New Commits For each new version range, classify commits into six categories: | Category | Signals | |----------|---------| | Added | `feat:`, "add", "new", "introduce", "implement" | | Changed | `refactor:`, "update", "change", "rename", "migrate", "improve" | | Deprecated | `deprecate:`, "sunset" | | Removed | `remove:`, "drop", "delete", "strip" | | Fixed | `fix:`, "bug", "patch", "resolve", "correct" | | Security | `security:`, "CVE", "vulnerability" | **Skip merge commits** — Merge commits whose subject starts with `Merge branch ` or `Merge pull request ` duplicate the merged commits. Skip them unconditionally. **Omit these commit types unless the change is visible to end users of the software (not developers):** - CI/CD config: files under `.github/`, `.gitlab-ci.yml`, `Jenkinsfile`, `.circleci/`, `azure-pipelines.yml` - Docs-only: `README.md`, `CONTRIBUTING.md`, `docs/**`, inline comments, docstrings - Lint/format config: `.eslintrc*`, `.prettierrc*`, `.editorconfig`, `.rubocop.yml`, `pyproject.toml` tool sections - Dependency bumps with no behavior change: dependabot, renovate, `package-lock.json`-only, `Gemfile.lock`-only - Whitespace-only, typo-only, or comment-only edits - Test-only additions (`tests/**`, `*_test.go`, `*.spec.ts`) with no corresponding source change **Keep** commits in the above categories when they ship user-visible behavior — e.g., a CI fix that unblocks a release, a test that fixes a regression users reported, a dependency bump that closes a CVE. **Prefix priority** — When a conventional commit prefix is present (`feat:`, `fix:`, `refactor:`, `perf:`, `security:`, `deprecate:`, `remove:`, with optional scope like `feat(auth):`), the prefix determines the category. Do not re-infer from the body. Fall back to keyword matching only when no recognized prefix exists. **Synthesize, do not copy** — Group related commits into single user-facing bullet points describing the end state, not the chronology. Commits are "related" if **any** of these apply: - Same user-visible feature or capability (e.g., three commits all touching the login flow) - Same file, directory, or module scope - Shared conventional-commit scope prefix (e.g., `feat(auth):` then `fix(auth):` then `refactor(auth):`) - Iterative fixes on the same bug: initial fix commit plus one or more follow-up correction commits Write one short, specific, past-tense sentence per bullet focused on what the user sees or feels. ### Step 5: Insert New Entries Consult `../changelog/references/format-guide.md` for formatting rules. **Insertion rules:** - Place new version sections directly below `## [Unreleased]` (or below the header/intro if no Unreleased section exists) - Maintain reverse chronological order — newest version first - If new commits are being tagged as a release: clear the `[Unreleased]` bullets and add a fresh empty `[Unreleased]` section above the new version - If commits are untagged: add bullets to the existing `[Unreleased]` section, merging with any existing bullets there - Update the version links section at the bottom with new comparison URLs - Use ASCII hyphen (`-`) between version and date: `## [X.Y.Z] - YYYY-MM-DD`. Never en-dash (`–`) or em-dash (`—`). - **Preserve `[YANKED]` markers**: if an existing heading reads `## [X.Y.Z] - YYYY-MM-DD [YANKED]`, keep the `[YANKED]` tag and the yanked section body untouched. - **Never modify or delete existing entries** — only append above them Use ISO date format (`YYYY-MM-DD`). Only include category headings that have entries. ### Step 6: Present the Result Show only the new section(s) that were added, not the entire file. ## Key Rules - **Concision target** — ≤15 words per bullet, 2–5 bullets per category, 2–5 categories per section. - **Preserve history** — Never modify, rewrite, or delete existing changelog entries. - **Preserve `[YANKED]`** — Keep yanked version headings and bodies exactly as they are. A yanked release is not a valid boundary commit; use the newest non-yanked version instead. - **For humans, not machines** — Write user-facing descriptions (e.g., "Added dark mode toggle"). Do not dump raw git log lines. - **Be specific** — Write "Fixed crash when uploading large files" rather than "Bug fixes". - **Canonical category order** — Added, Changed, Deprecated, Removed
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.