mahmoud/calver/calver-adoption
- community
Checking that the SKILL.md file is still in the repository.
Walk a project through adopting Calendar Versioning (CalVer): detect the current version, choose a scheme, document it with a link to calver.org, and cut the first calver release. Use when asked to "adopt calver", "switch to calendar versioning", "use date-based versions", or when the user cites calver.org and wants it applied to their project.
Install
npx vskill@latest install mahmoud/calver/calver-adoptionSKILL.md
calver-adoption
Take a project from whatever version it has today to its first calendar version, with the scheme documented and the release cut. Five steps, in order. Steps 1 through 4 are always done; step 5 is offered and only executed on request.
Vocabulary: schemes are written in calver.org 26.0 notation. Single letters are unpadded (M, D, W), a leading zero marks zero-padding (0M, 0D, 0W), YYYY is the full year and YY the two-digit year. Never write the doubled MM, DD, or WW: they are deprecated spellings of the unpadded tokens and readers misread them as padded. MINOR and MICRO are ordinary counters. Optional trailing segments go in square brackets: YYYY.M.D[.MICRO].
1. Detect the current version (before asking anything)
Check these sources in order and record every one that yields a value:
git tag --sort=-v:refname | head -5package.json→.versionpyproject.toml→[project].version, then[tool.poetry].versionCargo.toml→[package].versionsetup.cfg([metadata] version) orsetup.py(version=)- A source file exporting
__version__orVERSION CHANGELOG.md/CHANGES.md/NEWSheadings- GitHub releases (
gh release list --limit 5, ifghis available)
Multiple sources disagreeing: the highest published version (a tag or release) wins, and the drift is reported to the user, since every source gets rewritten in step 5. Also note the tag style (v1.4.2 vs 1.4.2); step 5 must match it.
Nothing found: ask one question, "What's the current version, or has this project not been released yet?" An unreleased project skips every migration concern below; its first release simply uses the chosen scheme's value for the planned release date.
2. Ask about time commitments (one question)
"Do you have support schedules, deprecation windows, LTS cadence, or compliance deadlines that the versioning docs should state?"
Default answer is "none", and most projects say so. If there is something, capture the window lengths for the step 4 paragraph. Two exemplars of what a good answer turns into:
- Ubuntu: each release supported N months; LTS every two years, five
years of support.
- NVIDIA GPU Operator: a new major every six months, twelve months of
support, so end-of-life is readable off the version.
3. Choose a scheme
Present this table and recommend one row based on what step 1 revealed about the project (library vs. application, release cadence, ecosystem).
| Scheme | Example | Flagship users | Fits | |
|---|---|---|---|---|
YYYY.MINOR.MICRO | 2026.2.0 | JetBrains, Kali, Spring Cloud | apps and platforms with a few releases a year | |
YY.MINOR.MICRO | 26.2.1 | Apple OSes (macOS 26, iOS 26), pip, attrs, CockroachDB, Mesa | libraries that want a year signal plus a counter | |
YYYY.M.MICRO | 2026.9.0 | Home Assistant, Betaflight, mise | monthly-cadence projects; default recommendation for packages | |
YY.M.MICRO | 26.9.0 | Black, conda, Twisted | same, shorter | |
YY.0M | 26.04 | Ubuntu, NixOS, OpenWrt | date-named platform releases that need fixed-width sorting | |
YYYY.M.D[.MICRO] | 2026.9.9 | regex, trove-classifiers (yt-dlp and certifi pad: YYYY.0M.0D) | tools that release per date |
State the ecosystem constraints that apply, from calver.org's padding section:
- crates.io and Go modules reject zero-padded segments (SemVer's
"MUST NOT contain leading zeroes"). Go modules additionally cannot take a year as the major version without a /v2026-style import path suffix every year, so advise Go libraries against CalVer entirely.
- PyPI normalizes padding away (PEP 440):
2026.04and2026.4are
the same release, and PyPI displays the unpadded form. Pick unpadded.
- npm requires exactly three numeric segments:
YYYY.M.MICRO
publishes, bare YYYY.M does not.
- Ordering: the first calendar version must compare greater than the
current version in the ecosystem's comparator. 2026.x > 4.x numerically everywhere, so this almost always holds. If the current major is already large (a project on 3000.x, or already on a date-like number), flag it for manual review before proceeding.
Unpadded is the default; pad only when the versions are sorted as strings (image tags, ISO filenames, object-store keys).
4. Document it
Ask where the versioning statement should live: a README "Versioning" section (default), CONTRIBUTING.md, or a docs page. Insert this paragraph, filled in:
## Versioning<Project> uses Calendar Versioning. Versionsfollow `<SCHEME>`; for example,<EXAMPLE><one sentence namingeach segment>. <If step 2 yielded commitments: "Each release issupported for <N> months." / "Deprecations are announced at least <N>releases before removal.">
Example of the filled sentence for YYYY.M.MICRO: "2026.9.0 is the first release of September 2026; the final number counts fixes within that month."
5. Cut the first release (offer; execute only on request)
- Compute the first calendar version from the planned release date and
the chosen scheme. Append .0 where the scheme has a MICRO segment.
- Update every version source found in step 1, in sync. A stale
__version__ next to a new tag is the most common way this goes wrong.
- Add a changelog entry that names the scheme change and links
https://calver.org.
- Commit.
git tagin the repo's existing style (vprefix or bare, per step
1), then push the tag.
- Publish with the ecosystem's command:
npm publish,uv buildthen
uv publish (or twine upload), cargo publish, gh release create.
Two cautions to state at the end:
- Verify the registry sorts the new version above the old one before
announcing (npm view <pkg> versions, the PyPI release list, and so on).
- Never retro-tag old commits with calendar numbers. The scheme starts
now; history keeps its old versions.
Install
<!-- GoodTurn: https://goodturn.ai/p/gtp_01m29brgj6eghb36njj0hgtftm -->
- Claude Code: symlink or copy this directory to
~/.claude/skills/calver-adoption.
- Oh My Pi, Codex, and other agents using the Agent Skills layout:
~/.agents/skills/calver-adoption. The skill's name and description are picked up automatically; no other configuration is needed.
Self-update
This skill ships with calver.org and tracks its notation. If the scheme table, the constraints, or the procedure drift from what https://calver.org says, or a step fails on a real project, open an issue or pull request at https://github.com/mahmoud/calver with the fix, bump version to the spec version it now matches, and keep the file under ~200 lines.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/calver-adoption/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mahmoud/calver/calver-adoption)