From 660540a84e141d3e01c7b671c09a0d3b63dbe77b Mon Sep 17 00:00:00 2001 From: Jean-Pierre Martineau Date: Mon, 7 Sep 2026 03:34:42 -0400 Subject: [PATCH] The version is written once, and there is somewhere to record a change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two pieces of release machinery that have to exist before a first bump, plus the bump: 0.1.0 to 0.2.0. The version was written twice — `pyproject.toml` and `meshterm/__init__.py` — and kept in step by hand. That is a drift waiting to happen, and an unusually visible one here: `__version__` is read by the splash wordmark, the menu mark, the About page, a trace export and the tile-server user agent, so the number a user reads on screen is the package attribute, while the number in a built wheel would have been the `pyproject` literal. `[project] version` is now `dynamic` and hatchling reads the attribute, so there is one place to edit and the two cannot disagree. Verified against hatchling rather than assumed: it resolves `0.2.0`. `CHANGELOG.md` starts in Keep a Changelog form, with the `[Unreleased]` heading that makes release notes a rename rather than an excavation of the log. Its first entry is 0.2.0 and it says plainly that the history before it is not reconstructed — 596 commits of pre-history would be a worse document, not a more complete one. 0.2.0 rather than something nearer the announced 0.9.0: the numbers between here and the release are for real feature sets, and there is no reason to spend them early. 0.9.0 is a number chosen for the launch, not one to be arrived at by counting — landing on 0.7.0 on the day and bumping straight to 0.9.0 is fine. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 45 ++++++++++++++++++++++++++++++++++++++++++++ meshterm/__init__.py | 2 +- pyproject.toml | 7 ++++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d9f5596 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +# Changelog + +Notable changes to MeshTerm, newest first. + +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the version +numbers follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html) — with the caveat +SemVer itself makes for a leading zero: while the major version is `0`, a **minor** bump is +allowed to change behaviour, not just add to it. + +## [Unreleased] + +## [0.2.0] — 2026-09-07 + +The first version to carry a changelog. Everything before it is in the commit log and is +deliberately not reconstructed here. + +### Added + +- This file. + +### Changed + +- The project description now says what MeshTerm is, how it reaches a radio, and which + systems it runs on, instead of naming a category. It is the PyPI summary and the package + docstring, which no longer disagree. +- The version is written in exactly one place, `meshterm/__init__.py`. The distribution + metadata reads it from there rather than repeating it, so the number on the splash screen + and the number in a built wheel cannot drift apart. +- The basemap user agent identifies the real repository and reports the running version. + It previously sent a bare `https://github.com/` and a hardcoded `0.1` to OpenFreeMap, + which is the only handle a tile operator has on a client. +- `macOS` and `Bluetooth` are spelled one way across the project. `BLE` stays where it is + an identifier — the transport name, the config keys, the CLI. + +### Fixed + +- The three commands `CONTRIBUTING.md` asks contributors to run all pass: + `python -m pytest -q`, `ruff check .`, and `ruff format --check .`. The lint gate had been + reporting 2222 errors and the format gate 154 files, so a first contributor could not tell + their own diff from the background. +- Two `TYPE_CHECKING` imports the test suite referenced but never imported, on paths that + happened never to run. + +[Unreleased]: https://github.com/jpmartineau/MeshTerm/compare/v0.2.0...HEAD +[0.2.0]: https://github.com/jpmartineau/MeshTerm/releases/tag/v0.2.0 diff --git a/meshterm/__init__.py b/meshterm/__init__.py index 4d78531..4ef5b3a 100644 --- a/meshterm/__init__.py +++ b/meshterm/__init__.py @@ -5,7 +5,7 @@ Supports USB, Bluetooth and TCP companion connection. For Windows, macOS and Lin from datetime import datetime -__version__ = "0.1.0" +__version__ = "0.2.0" __author__ = "Jean-Pierre Martineau" #: The year MeshTerm was first published; the copyright span starts here. diff --git a/pyproject.toml b/pyproject.toml index a50b810..13ba21e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshterm" -version = "0.1.0" +dynamic = ["version"] description = "MeshTerm is a full-featured TUI-based MeshCore client for your terminal. Supports USB, Bluetooth and TCP companion connection. For Windows, macOS and Linux." readme = "README.md" requires-python = ">=3.10" @@ -37,6 +37,11 @@ dev = [ [project.scripts] meshterm = "meshterm.cli:main" +# The one place a version is written; `[project] version` is dynamic so the package +# attribute and the distribution metadata cannot drift apart. +[tool.hatch.version] +path = "meshterm/__init__.py" + [tool.hatch.build.targets.wheel] packages = ["meshterm"]