Upgrade notes

SkillDocs & knowledge

Read the vendor's breaking changes, deprecations, migration notes and CVEs for every version between the one pinned now and the one being moved to, through the `whatsnew` MCP server's `upgrade_notes` tool. Use WHENEVER any dependency version changes in this repository, a bump, downgrade, add or swap in `gradle/libs.versions.toml`, `gradle/wrapper/gradle-wrapper.properties`, a plugin or `buildscript` version, a GitHub Actions `uses:` ref, or a CI image tag, and whenever asked "is it safe to upgrade X", "what changed in X since Y", or to review a Renovate/Dependabot-style bump. Run it BEFORE editing the version, not after the build breaks.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the Upgrade notes skill

What this skill tells your AI

The instructions your AI receives, as published by getknit/knit in .agents/skills/upgrade-notes/SKILL.md and read by ahel’s review.

Every version change in this repo gets the vendor's own notes read first. The whatsnew MCP server (https://whatsnew.fyi/mcp, declared in .mcp.json, no auth) returns every tracked release between two versions with the breaking, deprecation, migration and security sections verbatim, including breaking changes that shipped in a minor or a patch.

This skill tells you what to read before a bump. .agents/context/toolchain.md still decides whether the bump is allowed (minCompileSdk, the Kotlin/KSP lockstep, stable-only). Read both.

When the tool is missing

If no whatsnew tools are loaded, the server is not approved in this session. Tell the user once (Claude Code: /mcp, approve whatsnew) and carry on with the upgrade by reading the vendor's release notes directly. The skill is advisory; never block a bump on it.

Steps

  1. List what is moving. For each dependency, take from from what is pinned now (the catalog entry, or app/gradle.lockfile / settings-gradle.lockfile for a transitive one) and to from the target version. Use exact versions, never ranges. A catalog [versions] key that several libraries share (lifecycle, cameraX, room3) is one call, not one per artifact.

  2. Call upgrade_notes, up to 20 dependencies per call. The tool has no Maven registry: the registry field takes only npm, pypi, crates and rubygems, so leave it out and let repository make the match.

    • name: the Maven coordinate group:artifact, the plugin id, or the action's owner/repo.
    • repository: the library's GitHub repo as owner/repo, whenever it has one. Without it a Maven coordinate usually comes back untracked. Measured on this catalog: JetBrains/kotlin, google/ksp, square/okhttp, InsertKoinIO/koin, coil-kt/coil, tink-crypto/tink-java, robolectric/robolectric, pinterest/ktlint, detekt/detekt, gradle/gradle.
  3. Check match before you read anything. match.slug must be the library you meant. A note that says "Matched by name only" is a guess, and it can be wrong:

    • com.android.tools.build:gradle (AGP, and apksig rides the same version) matches Gradle, the build tool, by name. Call it with name: "android-gradle-plugin" instead.
    • For androidx and other Google libraries with no GitHub repo, the coordinate comes back untracked. Call list_products with the library's product name, then retry upgrade_notes with that slug as name. Measured: camerax and room resolve this way; Compose, lifecycle, core, activity, navigation and datastore are not tracked.
    • Discard a result whose slug is some other product. Don't report its notes.
  4. Read the result per dependency.

    • status: ok: start with signals (major bump, breaking mentions, removed and deprecated counts, cves), then read each entry in releases for its sections (breaking, security, deprecated, migration). The dependency's changes is the categorized list across the whole interval. A section's under names the sub-package in a monorepo release; skip sections about artifacts this app doesn't use.
    • untracked, unversioned, unreadable: What's New has no usable history for it. Read the vendor's notes yourself and say so.
    • notes like "is not tracked yet; the newest we track is …": the target version is newer than the tracked history (common with a same-week release), or it is a pre-release. The history holds stable releases only, so the detekt 2.0.0-alpha line and similar return no notes. Fall back to the vendor's notes for that stretch.
    • truncated or a cut change list: open the release's url or sourceUrl for the rest before concluding there is nothing breaking.
  5. Act on it. Apply migrations the notes call for in the same change as the bump. Report to the user, per dependency: breaking items that touch code or config this repo uses, CVEs fixed, and anything unchecked because it was untracked. Don't paste the whole payload. Then follow .agents/rules/build-and-test.md (regenerate every lock, then ./gradlew lint).

Signals

GitHub stars
116
Forks
9
Last commit
Sep 2026
Advanced
Item type
skill
Key
upgrade-notes
Source
github.com/getknit/knit