From 0231d240b92a2a11042fa62c0222d4c4b96a859d Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Sun, 16 Aug 2026 00:22:01 +0200 Subject: chore: release 0.4.0 The web client speaks ten languages instead of one: French, Spanish, Brazilian Portuguese, Simplified Chinese, Japanese, German, Italian, Dutch and Polish, all formal, with `hub`, `node` and `GEK` deliberately left in English so the interface still matches the CLI and the docs. Catalogues are fetched per language rather than shipped together, plural forms go through Intl.PluralRules because Polish needs four of them, and locale matching keeps the region so pt-BR and zh-CN resolve to the files written for them. Splitting one module into a loader and ten catalogues gave the SPA a version dependency it did not have before, and the hub was serving static assets with no explicit freshness at all. A browser that cached half a deploy either rendered every string as its own key or, in the other direction, failed to link the module graph and showed nothing. Static responses now carry no-cache, which costs one conditional request and answers 304 with no body. The node and common packages carry no functional change; they move with the version because the three are released together. Co-Authored-By: Claude Opus 5 --- packages/meshbay-common/pyproject.toml | 2 +- packages/meshbay-common/src/meshbay_common/__init__.py | 2 +- packages/meshbay-hub/pyproject.toml | 4 ++-- packages/meshbay-hub/src/meshbay_hub/__init__.py | 2 +- packages/meshbay-node/pyproject.toml | 4 ++-- packages/meshbay-node/src/meshbay_node/__init__.py | 2 +- packaging/rpm/meshbay-hub.spec | 9 ++++++++- packaging/rpm/meshbay-node.spec | 5 ++++- packaging/rpm/python3-meshbay-common.spec | 5 ++++- 9 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/meshbay-common/pyproject.toml b/packages/meshbay-common/pyproject.toml index dede42f..f8d4673 100644 --- a/packages/meshbay-common/pyproject.toml +++ b/packages/meshbay-common/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshbay-common" -version = "0.3.0" +version = "0.4.0" description = "MeshBay shared cryptographic primitives and protocol types" requires-python = ">=3.12" dependencies = [ diff --git a/packages/meshbay-common/src/meshbay_common/__init__.py b/packages/meshbay-common/src/meshbay_common/__init__.py index 8f6abb7..ef0f1f6 100644 --- a/packages/meshbay-common/src/meshbay_common/__init__.py +++ b/packages/meshbay-common/src/meshbay_common/__init__.py @@ -1,5 +1,5 @@ """MeshBay common — shared crypto primitives and protocol types.""" -__version__ = "0.3.0" +__version__ = "0.4.0" MNP_VERSION = "0.1" MHP_VERSION = "0.1" diff --git a/packages/meshbay-hub/pyproject.toml b/packages/meshbay-hub/pyproject.toml index 8c6fe70..4c18b10 100644 --- a/packages/meshbay-hub/pyproject.toml +++ b/packages/meshbay-hub/pyproject.toml @@ -4,11 +4,11 @@ build-backend = "hatchling.build" [project] name = "meshbay-hub" -version = "0.3.0" +version = "0.4.0" description = "MeshBay Hub — identity authority and group registry server" requires-python = ">=3.12" dependencies = [ - "meshbay-common>=0.3.0", + "meshbay-common>=0.4.0", "fastapi>=0.115", "uvicorn[standard]>=0.30", "sqlalchemy>=2.0", diff --git a/packages/meshbay-hub/src/meshbay_hub/__init__.py b/packages/meshbay-hub/src/meshbay_hub/__init__.py index 99b22ea..9af9cba 100644 --- a/packages/meshbay-hub/src/meshbay_hub/__init__.py +++ b/packages/meshbay-hub/src/meshbay_hub/__init__.py @@ -1,3 +1,3 @@ """MeshBay Hub — identity authority and group registry.""" -__version__ = "0.3.0" +__version__ = "0.4.0" diff --git a/packages/meshbay-node/pyproject.toml b/packages/meshbay-node/pyproject.toml index 897b5e9..a150fb3 100644 --- a/packages/meshbay-node/pyproject.toml +++ b/packages/meshbay-node/pyproject.toml @@ -4,11 +4,11 @@ build-backend = "hatchling.build" [project] name = "meshbay-node" -version = "0.3.0" +version = "0.4.0" description = "MeshBay Node — local file host, streaming server, and group daemon" requires-python = ">=3.12" dependencies = [ - "meshbay-common>=0.3.0", + "meshbay-common>=0.4.0", "fastapi>=0.115", # local web UI on localhost:18000 "uvicorn[standard]>=0.30", "httpx>=0.28", # hub client diff --git a/packages/meshbay-node/src/meshbay_node/__init__.py b/packages/meshbay-node/src/meshbay_node/__init__.py index e4989b2..25e544b 100644 --- a/packages/meshbay-node/src/meshbay_node/__init__.py +++ b/packages/meshbay-node/src/meshbay_node/__init__.py @@ -1,3 +1,3 @@ """MeshBay Node — local file host, streaming server, and group daemon.""" -__version__ = "0.3.0" +__version__ = "0.4.0" diff --git a/packaging/rpm/meshbay-hub.spec b/packaging/rpm/meshbay-hub.spec index 68a580c..cde6fc3 100644 --- a/packaging/rpm/meshbay-hub.spec +++ b/packaging/rpm/meshbay-hub.spec @@ -1,5 +1,5 @@ Name: meshbay-hub -Version: 0.3.0 +Version: 0.4.0 Release: 1%{?dist} Summary: MeshBay Hub — identity authority and group registry server License: AGPLv3+ @@ -74,6 +74,13 @@ getent passwd meshbay >/dev/null || \ %dir %attr(750, meshbay, meshbay) %{_sharedstatedir}/meshbay/hub %changelog +* Sun Aug 16 2026 MeshBay Team - 0.4.0-1 +- Web client translated into fr, es, pt-BR, zh-CN, ja, de, it, nl and pl +- Catalogues load on demand, one file per language, English as fallback +- Plural forms selected through Intl.PluralRules (Polish needs four) +- Locale matching keeps the region, so pt-BR and zh-CN resolve +- Static assets are revalidated, so a half-updated SPA cannot load + * Sat Aug 15 2026 MeshBay Team - 0.3.0-1 - Transfers survive leaving a group; downloads stream to disk in every browser - Download a folder as a zip, built in the browser (zip64, store-only) diff --git a/packaging/rpm/meshbay-node.spec b/packaging/rpm/meshbay-node.spec index 152cf3a..b2a4fce 100644 --- a/packaging/rpm/meshbay-node.spec +++ b/packaging/rpm/meshbay-node.spec @@ -1,5 +1,5 @@ Name: meshbay-node -Version: 0.3.0 +Version: 0.4.0 Release: 1%{?dist} Summary: MeshBay Node — local file host, streaming server, and group daemon License: AGPLv3+ @@ -53,6 +53,9 @@ install -Dm644 packaging/systemd/meshbay-node.service \ %{_userunitdir}/meshbay-node.service %changelog +* Sun Aug 16 2026 MeshBay Team - 0.4.0-1 +- No functional change; released in step with the other packages + * Sat Aug 15 2026 MeshBay Team - 0.3.0-1 - Video streaming is paced by the client; stream_stop frees the transcode slot - Operator can remove an empty directory and revoke a member over MNP diff --git a/packaging/rpm/python3-meshbay-common.spec b/packaging/rpm/python3-meshbay-common.spec index 0ecde29..cdfc984 100644 --- a/packaging/rpm/python3-meshbay-common.spec +++ b/packaging/rpm/python3-meshbay-common.spec @@ -1,5 +1,5 @@ Name: python3-meshbay-common -Version: 0.3.0 +Version: 0.4.0 Release: 1%{?dist} Summary: MeshBay shared cryptographic primitives and protocol types License: AGPLv3+ @@ -38,6 +38,9 @@ encryption/signing, keystore AES-256-GCM, and MNP protocol types. %{python3_sitelib}/meshbay_common-*.dist-info/ %changelog +* Sun Aug 16 2026 MeshBay Team - 0.4.0-1 +- No functional change; released in step with the other packages + * Sat Aug 15 2026 MeshBay Team - 0.3.0-1 - MNP: dir_delete, member_revoke, stream_more/stream_stop; file_chunk names its file -- cgit v1.2.3