Resolve Changelog Conflict logo

Resolve Changelog Conflict

Organization
vstorm-co
resolve-changelog-conflict

Resolve a merge conflict in CHANGELOG.md by detecting the file's own convention (Keep a Changelog per-version sections, monthly sections, a single [Unreleased] bucket, or another format) and folding the other side's entries into it. Use whenever git reports a conflict in CHANGELOG.md, or when entries in an older format need folding into the current one.

Overview

Publishervstorm-co
Repositoryagenticos
Skill nameresolve-changelog-conflict
Stars
137
Forks
27
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by vstorm-co on GitHub. Read the source before you install it.

Installation

Install the Resolve Changelog Conflict AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/vstorm-co/agenticos/tree/main/.claude/skills/resolve-changelog-conflict
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/vstorm-co/agenticos.git /tmp/agenticos
mkdir -p .claude/skills
cp -r /tmp/agenticos/.claude/skills/resolve-changelog-conflict .claude/skills/resolve-changelog-conflict
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Resolve Changelog Conflict in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Resolve Changelog Conflict on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Resolve Changelog Conflict is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Resolve a CHANGELOG.md conflict

Conflicts happen when two branches append near the same lines, or when one branch still carries an older changelog convention than the other. The resolution is never "pick a side wholesale": determine which side reflects this repo's current, documented convention, keep its structure, then re-express the other side's new entries inside it.

Do not assume a specific format (monthly sections, per-version sections, ticket-prefix style). Detect it from the file itself — every repo's changelog is different, and guessing wrong produces a "fix" that contradicts the project's own header and recent history.

Steps

  1. Learn this repo's actual convention before touching anything.

    • Read the file's own header/preamble — many state their format explicitly (e.g. "The format follows [Keep a Changelog]").
    • Look at the most recent non-conflicted entries (git log -p -- CHANGELOG.md on main/the target branch) to see the real grouping (per-version ## [x.y.z] - date, monthly ## YYYY-MM, a flat ## [Unreleased]), the category headers used (### Added/Changed/Fixed/Removed/Security, or something else), and how entries cite their origin (a PR number like (#123), a ticket prefix like (PROJ-123), a commit hash, a date, or a mix). Mirror what you find — do not invent a ticket prefix or category set the repo doesn't already use.
    • If the repo has a rule file or doc describing the changelog (check AGENTS.md, CONTRIBUTING.md, or a comment in the file header), follow it as the source of truth over inference from history.
  2. Identify what the other side actually adds. <incoming> is a branch only during a merge. A rebase or a cherry-pick is replaying one commit, so the incoming side is that commit rather than a branch, and the placeholders below resolve differently:

    Operation<incoming><merge-base>
    mergethe branch being mergedgit merge-base HEAD MERGE_HEAD
    rebaseREBASE_HEADREBASE_HEAD^
    cherry-pickCHERRY_PICK_HEADCHERRY_PICK_HEAD^

    Then diff the base against the incoming side for CHANGELOG.md only, and list its merged PRs/commits:

    bash
    git log --first-parent <merge-base>..<incoming> --pretty='%h|%ad|%s' --date=short
    git diff <merge-base> <incoming> -- CHANGELOG.md

    Ignore incoming lines that merely restate entries the target side already has (compare by ticket/PR/issue number where available, not raw text — wording often drifts).

  3. Resolve the hunks keeping the side that matches the repo's current convention (step 1). Strip the conflict markers so that structure survives intact. Do not leave an older-format section anywhere in the file — fold it in per step 4 instead.

  4. Convert each genuinely new change into an entry matching the file's existing style, inserted in the right place (its release/month/unreleased section per the detected grouping) and the right category, newest first within that grouping. Reuse the exact citation style already in use nearby (PR number, ticket prefix, hash, date — whichever the repo actually does) — pull the real values from the merge commit on the incoming side (step 2), never from memory or a template. One PR usually collapses to one bullet; give a second bullet only when a distinct facet belongs in another category (e.g. a security fix inside a feature PR). Condense multi-paragraph older-format prose to the user/operator-visible effect — implementation detail belongs in the PR, not the changelog.

  5. Verify ordering mechanically before committing, adapted to the grouping you found in step 1 (per-version, monthly, or otherwise — the check below assumes dated entries or section headers; adjust the regex if this repo's entries aren't dated inline):

    bash
    python3 - <<'EOF'
    import re
    sec=None; last=None; errs=[]
    for i,line in enumerate(open("CHANGELOG.md"),1):
        if line.startswith(("## ","### ")): sec=line.strip(); last=None; continue
        m=re.search(r'(\d{4}-\d{2}-\d{2})[^)]*\)\s*$', line)
        if m:
            d=m.group(1)
            if last and d>last: errs.append(f"L{i} {sec}: {d} after {last}")
            last=d
    print("\n".join(errs) if errs else "OK")
    EOF

    If the repo has its own Python (uv run python, a venv, etc.), use that interpreter instead of a bare python3. Also confirm no conflict debris remains - all three markers, not just the opening one, because an edit that deletes a <<<<<<< and leaves the ======= below it passes a check that only looks for openings: grep -cE '^(<{7}|={7}|>{7})' CHANGELOG.md.

  6. Stage the file and finish whatever operation is actually in progress - this conflict arrives from a rebase and a cherry-pick as often as from a merge, and each is continued differently:

    Present in .git/OperationContinue with
    MERGE_HEADmergegit commit
    REBASE_HEADrebasegit rebase --continue
    CHERRY_PICK_HEADcherry-pickgit cherry-pick --continue
    bash
    git rev-parse -q --verify MERGE_HEAD || git rev-parse -q --verify REBASE_HEAD \
      || git rev-parse -q --verify CHERRY_PICK_HEAD

Frequently asked questions

What does the Resolve Changelog Conflict AI skill do?

Resolve a merge conflict in CHANGELOG.md by detecting the file's own convention (Keep a Changelog per-version sections, monthly sections, a single [Unreleased] bucket, or another format) and folding the other side's entries into it. Use whenever git reports a conflict in CHANGELOG.md, or when entries in an older format need folding into the current one.

Why use Resolve Changelog Conflict on TypingMind?

Because you install it once and use it with any model. Resolve Changelog Conflict is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Resolve Changelog Conflict in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/vstorm-co/agenticos/tree/main/.claude/skills/resolve-changelog-conflict. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Resolve Changelog Conflict?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Resolve Changelog Conflict?

As many as you like. As long as a model supports skills, you can use Resolve Changelog Conflict with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Resolve Changelog Conflict AI skill free?

Yes. It is published on GitHub by vstorm-co under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇