Release & Versioning Policy
SemVer interpretation
ARI follows Semantic Versioning 2.0.
| Bump | What changed | Examples |
|---|---|---|
| MAJOR (1.0 → 2.0) | Backwards-incompatible changes to the public surface | ari.public.* symbol removed, MCP tool semantics change, checkpoint format breaking |
| MINOR (0.6 → 0.7) | Backwards-compatible feature additions | new ari.public.* symbol, new MCP tool, new ari subcommand, new env var with safe default |
| PATCH (0.7.0 → 0.7.1) | Bug fixes, doc updates, internal refactors with no API surface change | LLM prompt tweak that does not alter tool I/O, dashboard CSS, dependency bump |
Public surface for SemVer purposes:
- The CLI (
ari ...) — every documented subcommand and flag. ari.public.*Python imports.- Each skill's
mcp.jsontool list, names, and request/response shape. - The viz REST API (everything under
/api/). - Documented checkpoint files (
tree.json,nodes_tree.json,node_report.json,settings.json,workflow.yaml,experiment.md,manifest.lock,publish_record.json,lineage_decisions.jsonl). - Documented environment variables (those listed in
docs/reference/environment_variables.md).
Not part of the public surface:
- Modules outside
ari.public.*. - Internal-only helpers (
_-prefixed names). - Test fixtures and
vendor/snapshots (PaperBench, VirSci, ...). - Prompt strings under
ari/prompts/(governed by Phase PC, but not SemVer-protected — they may change in any minor release as long as the tool I/O contract holds).
Support policy
| Branch | Status | What gets backported |
|---|---|---|
main (latest minor) | Active | Features + bug fixes |
| Previous minor | Maintenance for 6 months after the next minor's release | Security + critical bug fixes only |
| Older minors | Out of support | None |
The current state lives in CHANGELOG.md and on the GitHub releases page.
Deprecation & removal
A deprecation is a notice that a public symbol or behaviour will be removed. We follow this lifecycle:
- Announce — release notes +
CHANGELOG.mdflag the change. - Warn — runtime emits a
DeprecationWarningfor at least one minor release. - Remove — the next MAJOR drops the warning and removes the code.
Examples currently in flight (full programme is folded into CONTRIBUTING.md::Deprecation process):
| Item | Announced | Warned since | Removal target |
|---|---|---|---|
$HOME/.ari/registries.yaml fallback | v0.5.0 | v0.7.1 | v1.0 |
$HOME/.ari/registry-data fallback | v0.5.0 | v0.7.1 | v1.0 |
| Legacy v0.5 JSONL memory store | v0.5.0 | v0.5.0 | v1.0 |
~/.ari/memory.json default arg | v0.7.0 | v0.7.1 (removed) | v1.0 |
ari/migrations/v05_to_v07/ shims | v0.7.0 | v0.7.0 | v1.0 |
Release checklist
When cutting a release:
- Update
CHANGELOG.mdwith the new section. Group entries under Added / Changed / Fixed / Deprecated / Removed / Security. - Bump the version in
ari-core/pyproject.tomland eachari-skill-*/pyproject.toml. - Run the full test suite + the
refactor-guards,docs-sync, anddocs-change-couplingCI workflows. - Run the docs gate:
grep -rn '~/\.ari/' docs/excludingrefactor_audit.mdreturns zero.- Every documented env var maps to a real source reference.
- Every documented MCP tool exists in the skill's
mcp.json. python scripts/docs/check_doc_sources.py --require-allexits 0 (every live doc's declaredsources:paths exist).python scripts/docs/check_doc_links.pyexits 0 (no broken intra-docs links or HTML hrefs).python scripts/docs/check_translation_freshness.py --strictexits 0 (noja/zhtranslation has alast_verifiedolder than its English source — see Source traceability). Run without--strictfor a non-blocking warning-only report.python scripts/docs/check_i18n_js.pyexits 0 (the threedocs/i18n/*.jsdeclare one identical key set).python scripts/docs/check_readme_parity.pyexits 0 (the rootREADME.{md,ja,zh}share one Markdown heading shape).
- Tag:
git tag v0.X.Y && git push origin v0.X.Y. - Open a release on GitHub with the changelog excerpt.
- Publish bundles:
ari ear publishfor any artefacts that need to ship alongside.
Compatibility windows
- A MINOR release is forward-compatible: a checkpoint produced on the previous minor must keep working on the new minor.
- A MAJOR release may require a one-shot migration step. The migration is documented in
docs/guides/migration.mdand run viaari migrate .... - Skills are versioned independently. A skill at
0.7.xshould work withari-coreat any0.7.y(compatibility within a minor). Across minors, expect a coordinated release.
See also
CHANGELOG.md— per-release notes.CONTRIBUTING.md::Deprecation process— full deprecation programme.docs/guides/migration.md— per-version migration recipes.docs/reference/public_api.md— the surface this policy protects.