diff --git a/CHANGELOG.md b/CHANGELOG.md index 611b4ef..f86ee60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.0.0] — 2026-07-02 + +First **stable** release (`Development Status :: 5 - Production/Stable`). From here +on, becwright's public contract — the `.bec/rules.yaml` schema, the `.bec.yaml` +bundle format, built-in check names and flags, CLI commands and exit codes, the +`check --json` shape, and MCP tool signatures — is stable under SemVer and only +breaks on a major bump, with the one-minor deprecation policy in between. No code +behavior changed since 0.4.0; this release adds the guarantees, versioning, and +docs that make the contract dependable. + ### Added -- Declared **Beta** maturity (`Development Status :: 4 - Beta` classifier) and a - public **Stability & versioning** section in the README: what the `1.0.0` - contract covers (`rules.yaml` schema, `.bec.yaml` bundle format, check names, - CLI commands and exit codes, `check --json` shape, MCP signatures) and the - exit criteria to reach it. +- A public **Stability & versioning** section in the README: what the contract + covers, the SemVer promise, and the deprecation policy. - `.bec/rules.yaml` now carries an optional `schema_version` (absent means `1`, so existing files keep working). `becwright init` stamps it, and the engine refuses a file stamped newer than it understands — with a clear "upgrade @@ -145,7 +152,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `uninstall`, `list`, `run`), the native pre-commit hook, and the first built-in checks. -[Unreleased]: https://github.com/DataDave-Dev/becwright/compare/v0.4.0...HEAD +[Unreleased]: https://github.com/DataDave-Dev/becwright/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/DataDave-Dev/becwright/compare/v0.4.0...v1.0.0 [0.4.0]: https://github.com/DataDave-Dev/becwright/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/DataDave-Dev/becwright/compare/v0.2.2...v0.3.0 [0.2.2]: https://github.com/DataDave-Dev/becwright/compare/v0.2.1...v0.2.2 diff --git a/README.es.md b/README.es.md index 4d17d43..da46d68 100644 --- a/README.es.md +++ b/README.es.md @@ -272,7 +272,7 @@ Inputs (todos opcionales): | Input | Default | Qué hace | |---|---|---| | `base` | rama base del PR | Ref de git contra la que diffear; solo se chequean los archivos cambiados vs ella | -| `version` | `becwright` | Especificador pip a instalar (ej. `becwright==0.4.0`) | +| `version` | `becwright` | Especificador pip a instalar (ej. `becwright==1.0.0`) | | `python-version` | `3.x` | Python con el que corre becwright | | `args` | *vacío* | Args extra que se agregan a `becwright check` | @@ -486,14 +486,14 @@ verificaciones) está documentado en el plan del proyecto. ## Estabilidad y versionado -becwright está en **Beta**. Se usa a sí mismo (sus propios commits pasan por -becwright), la suite de tests está en verde y está publicado en npm y PyPI — -pero sigue en `0.x`, así que bajo [SemVer](https://semver.org) una release menor -*puede* cambiar el contrato público. Si dependés de él en CI, fijá una versión -(`becwright==0.4.0`, o `npm i -g becwright@0.4.0`). +becwright es **estable** (`1.0`). Se usa a sí mismo (sus propios commits pasan +por becwright), la suite de tests está en verde y está publicado en npm y PyPI. +Bajo [SemVer](https://semver.org) el contrato público de abajo solo rompe con un +bump mayor, así que actualizar dentro de `1.x` siempre es seguro. Si dependés de +él en CI, fijá una versión igualmente (`becwright==1.0.0`, o +`npm i -g becwright@1.0.0`). -**El contrato público** — la superficie que se vuelve estable en `1.0.0` y a -partir de ahí solo cambia con un bump mayor: +**El contrato público** — estable desde `1.0.0`, cambia solo con un bump mayor: - El esquema de `.bec/rules.yaml` (los campos de una regla y su significado). - El formato de bundle `.bec.yaml` que `export` / `import` mueven entre repos. @@ -505,19 +505,10 @@ partir de ahí solo cambia con un bump mayor: Todo lo demás (el texto de los mensajes, el contenido del catálogo, los módulos internos) puede cambiar en cualquier momento. -**El camino a 1.0.0** — la publicamos cuando estemos seguros de que el contrato -de arriba no va a necesitar un cambio que rompa compatibilidad. Toda la base ya -está lista: - -- [x] Versionar los dos formatos en disco para que un archivo más nuevo falle - fuerte en vez de mal-interpretarse — el bundle `.bec.yaml` (`becwright_bec`) - y `.bec/rules.yaml` (`schema_version`). -- [x] Congelar el conjunto de campos de `rules.yaml` — los nueve campos son - estables y están fijados por tests. -- [x] Documentar y estabilizar los códigos de salida de la CLI y la forma de - `check --json`. -- [x] Definir una política de deprecación (abajo). -- [x] Validar en repos reales más allá de este. +Antes de `1.0.0` la base fue: los dos formatos en disco versionados para que un +archivo más nuevo falle fuerte (`schema_version` / `becwright_bec`), el conjunto +de campos de `rules.yaml` congelado y fijado por tests, los códigos de salida y +`check --json` documentados y fijados por tests, y validación contra repos reales. **Política de deprecación** — desde `1.0.0`, nada del contrato público se quita sin un major de aviso de por medio. Cuando algo tiene que cambiar: diff --git a/README.md b/README.md index 03ac3ac..8fe5ee0 100644 --- a/README.md +++ b/README.md @@ -264,7 +264,7 @@ Inputs (all optional): | Input | Default | What it does | |---|---|---| | `base` | PR base branch | Git ref to diff against; only files changed vs it are checked | -| `version` | `becwright` | pip specifier to install (e.g. `becwright==0.4.0`) | +| `version` | `becwright` | pip specifier to install (e.g. `becwright==1.0.0`) | | `python-version` | `3.x` | Python used to run becwright | | `args` | *empty* | Extra args appended to `becwright check` | @@ -515,14 +515,13 @@ verifications) is documented in the project plan. ## Stability & versioning -becwright is **Beta**. It's dogfooded (its own commits are gated by becwright), -the test suite is green, and it's published on npm and PyPI — but it is still -`0.x`, so under [SemVer](https://semver.org) a minor release *may* change the -public contract. If you depend on it in CI, pin a version -(`becwright==0.4.0`, or `npm i -g becwright@0.4.0`). +becwright is **stable** (`1.0`). It's dogfooded (its own commits are gated by +becwright), the test suite is green, and it's published on npm and PyPI. Under +[SemVer](https://semver.org) the public contract below only breaks on a major +bump, so a `1.x` upgrade is always safe. If you depend on it in CI, pin a version +anyway (`becwright==1.0.0`, or `npm i -g becwright@1.0.0`). -**The public contract** — the surface that becomes stable at `1.0.0` and only -changes on a major bump after that: +**The public contract** — stable as of `1.0.0`, changed only on a major bump: - The `.bec/rules.yaml` schema (rule fields and their meaning). - The `.bec.yaml` bundle format that `export` / `import` move between repos. @@ -534,16 +533,10 @@ changes on a major bump after that: Everything else (message wording, catalog contents, internal modules) can change at any time. -**The path to 1.0.0** — ship it once we're confident the contract above won't -need a breaking change. All the groundwork is now in place: - -- [x] Version both on-disk formats so a newer file fails loudly instead of - misparsing — the `.bec.yaml` bundle (`becwright_bec`) and `.bec/rules.yaml` - (`schema_version`). -- [x] Freeze the `rules.yaml` field set — the nine fields are stable and test-locked. -- [x] Document and stabilize CLI exit codes and the `check --json` shape. -- [x] State a deprecation policy (below). -- [x] Validate on real repositories beyond this one. +Before `1.0.0` the groundwork was: both on-disk formats versioned so a newer file +fails loudly (`schema_version` / `becwright_bec`), the `rules.yaml` field set +frozen and test-locked, exit codes and `check --json` documented and test-locked, +and validation against real repositories. **Deprecation policy** — from `1.0.0` on, nothing in the public contract is removed without a major bump of notice. When something has to change: diff --git a/pyproject.toml b/pyproject.toml index 6363b8f..6f825eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta" [project] name = "becwright" -version = "0.4.0" +version = "1.0.0" description = "The enforcement layer for AI coding agents — deterministic, portable constraints (BECs) that block a commit when a rule breaks, for AI-written and human-written code." readme = "README.md" requires-python = ">=3.12" @@ -28,7 +28,7 @@ keywords = [ ] dependencies = ["pyyaml>=6"] classifiers = [ - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "License :: OSI Approved :: MIT License", diff --git a/src/becwright/__init__.py b/src/becwright/__init__.py index 6a9beea..5becc17 100644 --- a/src/becwright/__init__.py +++ b/src/becwright/__init__.py @@ -1 +1 @@ -__version__ = "0.4.0" +__version__ = "1.0.0"