Generates CHANGELOG.md entries for upgrade versions found in upgrades/software/ by parsing init.go and upgrade.go
65
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.agents/skills/upgrade-changelog/SKILL.mdGenerate changelog entries in upgrades/CHANGELOG.md for any upgrade version under upgrades/software/ that doesn't already have an entry.
Find semver directories — list all directories under upgrades/software/ whose names match v<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.Z headings. If a version already has a heading, skip it entirely.
For each new version (no existing heading), gather data from two files:
upgrades/software/<version>/init.goFind all utypes.RegisterMigration(...) calls. Each call has the form:
utypes.RegisterMigration(moduleName, version, handlerFn)moduleName is a Go constant (e.g., dv1.ModuleName). Resolve it:
dv1 "pkg.akt.dev/go/node/deployment/v1")ModuleName constant definition to get the actual string valueversion is a uint64 — this is the from version. The to version is version + 1.moduleName version -> version+1upgrades/software/<version>/upgrade.goFind the StoreLoader() method. It returns a *storetypes.StoreUpgrades struct with optional fields:
Added: []string{...} — new storesRenamed: []storetypes.StoreRename{...} — renamed storesDeleted: []string{...} — removed storesIf StoreLoader() returns nil, there are no store changes.
For each store key constant (e.g., epochstypes.StoreKey, ttypes.ModuleName):
Insert the new entry in upgrades/CHANGELOG.md immediately 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):
Stores section if there are no added, renamed, or deleted storesadded/renamed/deleted subsections individually if emptyMigrations section if there are no migrations###### Description heading (leave it for the user to fill in)Report results — list each version processed and what was added. For skipped versions (already in CHANGELOG), mention they were skipped.
StoreKey or ModuleName — both are used as store identifiers. Resolve whichever constant appears in the code.go doc if needed. The packages typically follow the pattern pkg.akt.dev/go/node/<module>/<version>.`epochstypes.StoreKey`) and warn the user.096bff5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.