upgrade-changelog
SkillDev toolsGenerates CHANGELOG.md entries for upgrade versions found in upgrades/software/ by parsing init.go and upgrade.go
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the upgrade-changelog skill
What this skill tells your AI
The instructions your AI receives, as published by akash-network/node in .agents/skills/upgrade-changelog/SKILL.md and read by ahel’s review.
Generate changelog entries in upgrades/CHANGELOG.md for any upgrade version under upgrades/software/ that doesn't already have an entry.
Steps
-
Find semver directories — list all directories under
upgrades/software/whose names matchv<major>.<minor>.<patch>(e.g.,v2.0.0,v1.0.0). -
Read
upgrades/CHANGELOG.md— identify which versions already have entries by scanning for##### vX.Y.Zheadings. If a version already has a heading, skip it entirely. -
For each new version (no existing heading), gather data from two files:
3a. Parse
upgrades/software/<version>/init.goFind all
utypes.RegisterMigration(...)calls. Each call has the form:utypes.RegisterMigration(moduleName, version, handlerFn)moduleNameis a Go constant (e.g.,dv1.ModuleName). Resolve it:- Find the import alias (e.g.,
dv1 "pkg.akt.dev/go/node/deployment/v1") - Search the imported package for
ModuleNameconstant definition to get the actual string value
- Find the import alias (e.g.,
versionis auint64— this is the from version. The to version isversion + 1.- Record each migration as:
moduleName version -> version+1
3b. Parse
upgrades/software/<version>/upgrade.goFind the
StoreLoader()method. It returns a*storetypes.StoreUpgradesstruct with optional fields:Added: []string{...}— new storesRenamed: []storetypes.StoreRename{...}— renamed storesDeleted: []string{...}— removed stores
If
StoreLoader()returnsnil, there are no store changes.For each store key constant (e.g.,
epochstypes.StoreKey,ttypes.ModuleName):- Find the import alias in the file
- Search the imported package for the constant definition to get the actual string value
-
Insert the new entry in
upgrades/CHANGELOG.mdimmediately after the line:Add new upgrades after this line based on the template abovefollowed by
-----.Use this format (newest entries go first, right after the delimiter):
##### vX.Y.Z ###### Description - Stores - added - `storeName`: brief description if available - renamed - `oldName` -> `newName` - deleted - `storeName`: brief description if available - Migrations - moduleName `from -> to`Omission rules (match existing CHANGELOG style):
- Omit the entire
Storessection if there are no added, renamed, or deleted stores - Omit
added/renamed/deletedsubsections individually if empty - Omit the entire
Migrationssection if there are no migrations - Always include the
###### Descriptionheading (leave it for the user to fill in)
- Omit the entire
-
Report results — list each version processed and what was added. For skipped versions (already in CHANGELOG), mention they were skipped.
Important notes
- Store key constants may be named
StoreKeyorModuleName— both are used as store identifiers. Resolve whichever constant appears in the code. - When resolving Go constants from external packages, search under the Go module cache or use
go docif needed. The packages typically follow the patternpkg.akt.dev/go/node/<module>/<version>. - If a constant cannot be resolved, use the raw Go expression as a placeholder (e.g.,
`epochstypes.StoreKey`) and warn the user. - Multiple versions may need entries — process them all in one run, inserting newest first after the delimiter.
Signals
- GitHub stars
- 1k
- Forks
- 275
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
upgrade-changelog- Source
- github.com/akash-network/node