The version is written once, and there is somewhere to record a change

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) <noreply@anthropic.com>
This commit is contained in:
Jean-Pierre MartineauandClaude Opus 5 committed 2026-09-07 03:34:42 -04:00
1 parent b7c629b50f
commit 660540a84e
3 files changed
+52 -2

No files matched your search

+45
View File
@@ -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
+1 -1
View File
@@ -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.
+6 -1
View File
@@ -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"]