English | 中文
Versioning Policy¶
godot-e2e follows Semantic Versioning: MAJOR.MINOR.PATCH.
This document defines what counts as a breaking change for this project specifically. godot-e2e ships across three surfaces — a Python package, a Godot addon, and the wire protocol between them — and "breaking" means something different on each.
Stable surfaces¶
A breaking change to anything in the table below requires a MAJOR bump.
| Surface | Examples | Examples of breaking changes |
|---|---|---|
| Public Python API | symbols re-exported from godot_e2e/__init__.py (GodotE2E, error classes, type wrappers like Vector2) |
renaming a method, removing a parameter, changing return type, raising a different exception class for the same condition |
| Wire protocol | command names, request/response shape, type tags (_t: "v2" etc.), the 4-byte length-prefix framing |
renaming a command, removing a field, changing the framing header, changing the meaning of an existing field |
| Addon API | autoload name (AutomationServer), command-line flags (--e2e, --e2e-port, --e2e-port-file, --e2e-token, --e2e-log), addons/godot_e2e/ directory layout |
renaming the autoload, removing or renaming a flag, moving the addon to a different directory |
| pytest fixtures | fixture names (game, game_fresh), config keys (godot_e2e_project_path, env GODOT_E2E_PROJECT_PATH, GODOT_PATH), @pytest.mark.godot_project |
renaming a fixture, changing what gets reset between tests in a way that breaks existing test ordering |
Explicitly not stable¶
These can change in any release without a major bump:
- Internal helpers. Anything not exported from
__init__.py, includingGodotClient,GodotLauncherinternals, and any private name (leading_). - New commands within the same minor. A wire command added in
1.x.0may iterate on its shape until1.(x+1).0. - Error message text. Match on exception class, not on message strings.
- Log output format. The
--e2e-logcontent is for humans; do not parse it. - Test-output directory layout.
test_output/...paths can be reorganized. - Default port and timeout values. Configure explicitly if you depend on them.
- Type-tag set for new Godot types. Adding a new
_ttag is non-breaking; removing or renaming an existing one is.
Compatibility window¶
- Godot: tested against Godot 4.x stable. A new minor of godot-e2e may require a newer Godot 4.x minor; this will be called out in the changelog.
- Python: tested against Python 3.9+. Dropping a Python version is a
MAJORchange.
How a breaking change reaches users¶
- Discussion in an issue, with the affected surface tagged.
- Pre-announcement in
docs/update/next.mdunder "Changed" with aBREAKING:prefix. - One minor of deprecation warnings on the affected entry point, where feasible.
- Major version bump on release.
- Migration notes in the archived
vX.Y.Z.mdfile.
For features added inside the same minor, we may iterate freely until the following release — the surface is considered "stabilizing", not stable, until the minor ships.