Ctrl K
ComunidadGuías…

VERSIONING.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Versioning

Jentic One follows [Semantic Versioning](https://semver.org) with the pre-1.0
conventions below. The version is the single source of truth in
[`pyproject.toml`](pyproject.toml); every other surface derives from it
(`src/jentic_one/__init__.py` reads it via `importlib.metadata`, and the Helm
charts and Go CLI are stamped to match at release time).

## Pre-1.0 policy (public beta)

While Jentic One is in the `0.x` line it is in **public beta** (see the note
in the [README](README.md)): schemas, APIs, and CLI commands can change
between `0.x` releases without a major version bump — pin a version if you
need stability.

Concretely, on the `0.MINOR.PATCH` line:

- **MINOR** (`0.13 → 0.14`) — may include breaking changes (API, DB schema, CLI
  flags, config) as well as features. Read the release notes before
  upgrading; the upgrade contract and rollback recipes are in
  [`docs/operations/upgrades.md`](docs/operations/upgrades.md).
- **PATCH** (`0.13.2 → 0.13.3`) — bug fixes and non-breaking changes only.

**Support window:** during the beta, fixes land on the latest release only —
there are no maintained release branches and no backports. If you need a fix,
upgrade to the release that carries it.

We will not cut `1.0.0` until the public API, database schema, and CLI surface
are stable enough to promise the usual SemVer backward-compatibility guarantee.

## Where the version lives

| Surface | Source | How it's kept in sync |
| --- | --- | --- |
| Python package | `pyproject.toml` `[project].version` | canonical |
| `jentic_one.__version__` / `/health` / OpenAPI | package metadata | `importlib.metadata.version("jentic-one")` — never hand-edited |
| Helm charts (umbrella + observability + subcharts) | each `Chart.yaml` | bumped in lockstep by the release tooling |
| Broker OpenAPI spec (`info.version` + `/health` examples) | `openapi/broker/broker.openapi.yaml` (hand-curated) | bumped in lockstep by release-please via `x-release-please-version` markers; derived copies regenerated on the Release PR |
| Go CLI (`jenticctl`, `jentic`) | build-time ldflag | stamped from the git tag by GoReleaser (`version = "dev"` in source) |

## Lockstep versioning

For beta, all artifacts share **one version** (the server, the Helm charts, and
the CLI binaries all carry the same `X.Y.Z`). The CLI is published as standalone
signed binaries but is versioned in lockstep with the server. Decoupling the CLI
and server version lines is deferred until there is a concrete need (e.g.
independent CLI release cadence for remote-client users).

## How releases are cut

Releases are automated via [release-please](https://github.com/googleapis/release-please):
a standing **Release PR** (`chore(main): release X.Y.Z`) accumulates
Conventional-Commit changes into a proposed version bump + `CHANGELOG.md`.
**Merging that PR is the release** — it tags `vX.Y.Z`, creates the GitHub
Release, and triggers the tag pipeline (build/migrate/`/health` gate →
signed CLI binaries). See [`docs/development/releasing.md`](docs/development/releasing.md) for the full
procedure.

The `0.x` line continues the restored `v0.1.0`…`v0.13.2` tag baseline —
automated releases picked up at `v0.14.0` rather than resetting, because the
earlier tags and GitHub Releases are real and publicly visible.
[`CHANGELOG.md`](CHANGELOG.md) covers `v0.14.0` onward; the earlier tags
carry GitHub Releases only.