Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
33 changes: 12 additions & 21 deletions README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |

Expand Down Expand Up @@ -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.
Expand All @@ -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:
Expand Down
29 changes: 11 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |

Expand Down Expand Up @@ -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.
Expand All @@ -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:
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion src/becwright/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.4.0"
__version__ = "1.0.0"
Loading