From bac4db6b0a545060a7f9fc3cd55f0116c30f3885 Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Sat, 28 Feb 2026 13:33:49 -0800 Subject: [PATCH] Updating changelog + build for 2.2.0 --- CHANGELOG.md | 16 ++++++++++++++++ frontend/package.json | 2 +- pyproject.toml | 2 +- tests/test_packet_pipeline.py | 20 +++++--------------- uv.lock | 2 +- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5ecd5f..8f281d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## [2.2.0] - 2026-02-28 + +Feature: Track advert paths and use to disambiguate repeater identity in visualizer +Feature: Contact info pane +Feature: Overhaul repeater interface +Bugfix: Misc. frontend rendering + perf improvements +Bugfix: Better behavior around radio locking and autofetch/polling +Bugifx: Clear channel name field on new-channel modal tab change +Bugfix: Repeater inforbox can scroll +Bugfix: Better handling of historical DM encrypts +Bugfix: Handle errors if returned in prefetch phase +Misc: Radio event response failure is logged/surfaced better +Misc: Improve test coverage and remove dead code +Misc: Documentatin and errata improvements +Misc: Databse storage optimization + ## [2.1.0] - 2026-02-23 Feature: Add ability to remember last-used channel on load diff --git a/frontend/package.json b/frontend/package.json index f02fb01..f8e607a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "remoteterm-meshcore-frontend", "private": true, - "version": "2.1.0", + "version": "2.2.0", "type": "module", "scripts": { "dev": "vite", diff --git a/pyproject.toml b/pyproject.toml index 36fbd2d..f25fcf1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "remoteterm-meshcore" -version = "2.1.0" +version = "2.2.0" description = "RemoteTerm - Web interface for MeshCore radio mesh networks" readme = "README.md" requires-python = ">=3.10" diff --git a/tests/test_packet_pipeline.py b/tests/test_packet_pipeline.py index 0344581..75a6e77 100644 --- a/tests/test_packet_pipeline.py +++ b/tests/test_packet_pipeline.py @@ -2274,9 +2274,7 @@ class TestHistoricalChannelDecryptIntegration: return bytes([0x15, 0x00]) + payload @pytest.mark.asyncio - async def test_store_then_add_room_then_historical_decrypt( - self, test_db, captured_broadcasts - ): + async def test_store_then_add_room_then_historical_decrypt(self, test_db, captured_broadcasts): """Full flow: packet arrives for unknown channel, channel added later, historical decrypt recovers the message.""" import hashlib as _hashlib @@ -2310,18 +2308,14 @@ class TestHistoricalChannelDecryptIntegration: packet_id = undecrypted[0][0] # --- Step 2: user adds the hashtag room --- - await ChannelRepository.upsert( - key=channel_key_hex, name=channel_name, is_hashtag=True - ) + await ChannelRepository.upsert(key=channel_key_hex, name=channel_name, is_hashtag=True) # --- Step 3: run historical channel decryption (real crypto, no mocks) --- broadcasts.clear() with patch("app.websocket.ws_manager") as mock_ws: mock_ws.broadcast = AsyncMock() - await _run_historical_channel_decryption( - channel_key, channel_key_hex, channel_name - ) + await _run_historical_channel_decryption(channel_key, channel_key_hex, channel_name) # --- Verify: message was created in DB --- messages = await MessageRepository.get_all( @@ -2339,9 +2333,7 @@ class TestHistoricalChannelDecryptIntegration: assert packet_id not in remaining_ids @pytest.mark.asyncio - async def test_historical_decrypt_skips_wrong_channel( - self, test_db, captured_broadcasts - ): + async def test_historical_decrypt_skips_wrong_channel(self, test_db, captured_broadcasts): """Historical decrypt with a different channel key does not decrypt the packet.""" import hashlib as _hashlib @@ -2377,9 +2369,7 @@ class TestHistoricalChannelDecryptIntegration: assert len(await RawPacketRepository.get_all_undecrypted()) == 1 @pytest.mark.asyncio - async def test_historical_decrypt_multiple_packets( - self, test_db, captured_broadcasts - ): + async def test_historical_decrypt_multiple_packets(self, test_db, captured_broadcasts): """Historical decrypt recovers multiple messages from different senders.""" import hashlib as _hashlib diff --git a/uv.lock b/uv.lock index 39ee597..e233a8a 100644 --- a/uv.lock +++ b/uv.lock @@ -854,7 +854,7 @@ wheels = [ [[package]] name = "remoteterm-meshcore" -version = "2.1.0" +version = "2.2.0" source = { virtual = "." } dependencies = [ { name = "aiosqlite" },