versioning
Skill5 starsChanged 37 days agoMITView on GitHub
Chooses and applies the version level for a change to a versioned package — a qadam, @aiqadam/qadams-framework, @aiqadam/qadams-common, @aiqadam/shared or the platform. Use when a diff touches packages/qadams/**, packages/shared or the root package.json version, when writing a changeset, when CI's semver gate disagrees with the level you declared, or when deciding whether the semver-override label applies.
10 other projects use a version of this.
Adopted by
Most recently taken up by
- e-reitbauer/habitstheir own version, first seen Nov 8, 2026
- AnyOrgName/php-skillstheir own version, first seen Nov 8, 2026
- nerymurillohnd/the-claude-factorytheir own version, first seen Nov 1, 2026
- srfinch17/peckworks-skills-laboratorytheir own version, first seen Oct 20, 2026
- vmikhailov/code-explorertheir own version, first seen Oct 20, 2026
- syntropic137/software-leverage-pointstheir own version, first seen Oct 14, 2026
Used with
Projects with it also use dependencies and security.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
dbtlrSkilldependencies
Use when adding, evaluating, or updating Rust crate dependencies. Also use when considering whether to implement something yourself vs pulling in a library.
Also in 3 projects that use this
0xSeroSkillsecurity
Also in 3 projects that use this
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- cunarist/rinf★ 2.8ksame name
- vmikhailov/code-explorer★ 17same name
- xiaomingleng/Chinese-New-Year-Skills★ 9same name
- AnyOrgName/php-skills★ 4same name
- pyand3v/skills★ 2same name
- e-reitbauer/habits★ 1same name
- nerymurillohnd/the-claude-factory★ 1same name
- srfinch17/peckworks-skills-laboratory★ 0same name
- syntropic137/harness-app-template★ 0same name
- syntropic137/software-leverage-points★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- .agents/features/agents.mdAGENTS.md
- AGENTS.mdAGENTS.md
- add-endpointSkill
- add-entitySkill
- add-featureSkill
- agent-browserSkill
- db-migrationSkill
- designSkill
- grill-meSkill
- local-docker-deploySkill
- mcp-builderSkill
- mintlifySkill
- playwright-e2e-testingSkill
- qadam-builderSkill
- ubiquitous-languageSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 73
No gate checks this (ADR-0001).
- Very specific: line 77
Check what the branch already did: git diff origin/main...HEAD -- .changeset/.
- Very specific: line 79
Add the changeset (step 5).
- Very specific: line 122
If CI over-estimates — what it calls a break is not one for any consumer — say why in the PR and ask a maintainer for semver-override.
- Distinctive: line 124
Never lower a level to get past a check.
- Very specific: line 131
Before tagging, merge a docs PR that folds ## Unreleased in docs/install/configuration/breaking-changes.mdx into a ## <version> section for …
- Distinctive: line 142
Only for gate 2, only when CI computed a higher level than the change is, and only when a maintainer agrees and applies it.
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Versioning
.agents/rules/versioning.md says what each version number promises:
the layer table, the 0.x shift, the caret-range promise, compatibility floors and the framework
support window. This skill is the procedure. Read the rule first; this file does not repeat its tables.
1. List the versioned packages the diff touches
git diff --stat origin/main...HEAD -- packages/shared packages/qadams package.jsonFor each one, note its name, its layer in the rule's table and its current version. Versioned:
packages/shared, packages/qadams/framework, packages/qadams/common, and every
packages/qadams/{core,community}/<name> — its src/** (translations included) and its own
package.json. A PR that touches five qadams needs five decisions, one per qadam. The root
package.json version is the platform's and moves only in a release (rule, "Who raises versions").
2. Choose the level, highest matching row wins
Qadam — judge from a flow that already pins the current version and is not edited:
- major — an action, trigger or prop removed or renamed (action and trigger
names are permanent); a new required prop with nodefaultValuethat reproduces the old behaviour (see "Adding a prop to an action/trigger that has already shipped" in theqadam-builderskill); a narrowed type (a dropdown option removed, a looser input rejected); an output field removed, renamed or retyped; or the step, unchanged, now does something different — #397 (telegram-botbegan sending and checkingsecret_token) and #393 (long polling) did that with identical schemas. - minor — a new action or trigger; an optional prop; a required prop whose
defaultValuereproduces the old behaviour; a new output field. A new named export fromsrc/index.ts(an auth, a client factory) also goes here by repo convention; a new action is not an export — no consumer imports actions by name. - patch — a fix that changes none of the above.
SDK (qadams-framework, qadams-common) — judge from the public API a qadam compiles against:
a removed or renamed export, a changed signature or a narrowed type is major; a new context
version is major and, from 1.0.0, needs a support-table row and keeps the previous major's engine
shim (ADR-0002, landed in #801/#814); a new export is minor; a fix is patch.
@aiqadam/shared — private and no longer published since #799, so it has no consumer outside
the repo of its own: a patch changeset on shared is enough. But qadams-framework re-exports
straight from shared, and its tarball vendors all of shared's build — so a shared change is
also a framework change, and needs its own changeset on @aiqadam/qadams-framework at the SDK
level above: judge it from what a qadam reaches through the framework (a re-exported symbol, a type
one of them references, the behaviour of a re-exported function). Nothing a qadam reaches changed →
patch. Without that line the release PR still patches the framework (updateInternalDependencies),
so a breaking change to a re-exported symbol would ship as a framework patch; gate 1 fails a
shared src/ or dependency change whose PR has no framework changeset. Usually it is a second
line in the same file:
---
"@aiqadam/shared": patch
"@aiqadam/qadams-framework": minor
---
Narrow `QadamCategory` (re-exported by the framework).Then place the level on the package's line. On 0.x: major → minor, everything else →
patch, except a new export, which stays minor. From 1.0.0: as is. Unsure between two levels?
Take the higher one.
3. Write the behaviour answer into the PR body
One line per package: what an existing step would notice (or "nothing"), and the level that follows. No gate checks this (ADR-0001); the line is how a reviewer checks it.
4. Apply the level — a changeset, never a hand edit
- Check what the branch already did:
git diff origin/main...HEAD -- .changeset/. One changeset per package is enough; if it already declares the level you need, stop. - Add the changeset (step 5). Never edit
versionin a package's ownpackage.json(or the root): only the release PR raises versions, and gate 1 fails a hand edit. The one edit gate 1 accepts is a realignment of the root and@aiqadam/platformto the newestvX.Y.Ztag when the tree has drifted from it, together with a pending platform changeset that brings the next release back to at least the old number (#798 did it once:2.0.0→1.1.0plus amajor). The rule is intools/ci/check-changesets.mjs, "REALIGNING THE PLATFORM". - Changed a qadam's dependencies? Gate 1 requires the changeset. Changed a prop?
npm run check-required-prop-defaultsmust pass — it accepts the breaking slot declared in a changeset (a hand-edited version fails gate 1 instead). On a Renovate branchrenovate-changeset.ymlwrites the changeset — do not add a second one. - A platform change that needs operator action: a
"@aiqadam/platform": majorchangeset plus thedocs/install/configuration/breaking-changes.mdxentry — gate 4 fails the PR without the pair.breaking-change-gatere-checks the version jump at release; atype!:subject still counts as a breaking marker there, but the changeset is what raises the version.
5. Write the changeset
A PR adds a .changeset/*.md naming each package, its level and one line on what changed:
---
"@aiqadam/qadam-slack": minor
---
Add the "Schedule message" action.npx changeset writes one interactively (or write the file by hand). The release PR
("chore(release): version packages") collects them, raises the versions and their in-repo
dependents, writes the changelogs and deletes the files; it never publishes or tags — a maintainer
tags the merged result, which starts release.yml. Format and mechanics: .changeset/README.md
and tools/scripts/changesets/version.mjs.
6. When gate 2 disagrees
Gate 2 computes a level from the actions / triggers / props / output-schema diff (qadams) and, for
the SDK, from the public .d.ts surface of qadams-framework / qadams-common
(tools/ci/sdk-api-surface.mjs: a removed export, a changed signature or a narrowed type is
breaking, a new export is a feature). It fails when the declared level is lower. A shared change
is measured on the framework too, which re-exports and vendors it.
- Assume CI is right first. Read what it reports; if it found a removal or a narrowing you missed, raise the level.
- If CI over-estimates — what it calls a break is not one for any consumer — say why in the PR and
ask a maintainer for
semver-override. Agents never apply that label. - Never lower a level to get past a check. A level above the computed one always passes.
- A clean gate 2 says nothing about behaviour: step 3 still applies.
7. Cutting a release (maintainers)
- Merge the release PR ("chore(release): version packages"). It raises the versions and the root, and consumes the changesets.
- Before tagging, merge a docs PR that folds
## Unreleasedindocs/install/configuration/breaking-changes.mdxinto a## <version>section for the new root version (merge it into an existing## <version>if there is one) and leaves an empty## Unreleased. Do not commit this to the release PR's branch:changesets.ymlrewrites that branch on every push tomain. The release'sbreaking-change-gateneeds a non-empty## <version>section. - Tag the merged result
v<root version>. That startsrelease.yml, andversion-tag-gatecompares the tag with the root.
8. When semver-override applies
Only for gate 2, only when CI computed a higher level than the change is, and only when a maintainer agrees and applies it; every use stays visible on the PR. It does not cover a missing changeset (gate 1), a version already published (gate 3), a floor or support-table failure (gates 7 and 8), or a major you would rather not ship.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

