# BUGS Known defects and outstanding issues in meshcore-bot. Fixes that have shipped are listed in [CHANGELOG.md](CHANGELOG.md); the archive at the bottom of this file is kept only for historical reference. --- ## Outstanding known issues As of **v1.0.0**. ### High priority _None outstanding._ ### Medium priority | ID | Module | Description | Workaround | |----|--------|-------------|------------| | BUG-004 | `message_handler` | RF data correlation (SNR/RSSI) can miss messages if the RF log event arrives more than `rf_data_timeout` (default 15 s) after the message | Increase `rf_data_timeout` in `[Bot]` | | BUG-005 | `scheduler` | Memory headroom is tight on 512 MB boards such as the Raspberry Pi Zero 2 W when the bot and web viewer run together. v1.0.0 reduced the load substantially — the dashboard is served from a background snapshot rather than recomputing ~50 aggregate queries per request, and retention now prunes on schedule — but the ceiling is still close on the smallest boards | Disable the web viewer (`[Web_Viewer] enabled = false`) or tune the mesh graph (`graph_startup_load_days = 7`) | | BUG-006 | `feed_manager` | Stale rows in `feed_message_queue` from an old install can cause repeated queue-processing errors after a database migration | Clear the pending queue: `DELETE FROM feed_message_queue WHERE sent_at IS NULL` | | BUG-008 | `telegram_bridge_service` | Telegram `message_thread_id` (forum/topic support) is not implemented — messages go to the main group channel only | None; tracked in [TODO.md](TODO.md) with the two-way Telegram bridge work | ### Low priority / by design | ID | Module | Description | Notes | |----|--------|-------------|-------| | BUG-011 | `repeater_manager` | MeshCore devices hard-limit contacts to 300; the auto-purge threshold is 280, so purging 20 at a time may not keep up on very busy meshes | Tune `auto_purge_threshold` and ensure `auto_manage_contacts` is enabled | | BUG-014 | `packet_capture_service` | Packet hash calculation silently falls back to a default value on failure (`packet_capture_service.py:1347`) | Low impact; affects deduplication accuracy only | | BUG-026 | `message_handler` | Keyword-dispatched help and command responses are sent as a single message with no auto-chunking, so long responses may be truncated by transport limits rather than split into extra multipart messages | Design choice. Commands can call `send_response_chunked()` explicitly if they want multi-part replies | ### Closed as won't fix | ID | Module | Description | |----|--------|-------------| | BUG-007 | `discord_bridge_service` | Discord webhook rate limiting is expected behavior. Keep bridged channels low-traffic or rate-limit upstream | --- ## Reporting new bugs Open an issue at the [project repository](https://github.com/agessaman/meshcore-bot/issues) and include: - Bot version (`git describe --tags`) - The relevant section of `config.ini`, with keys and tokens redacted - Log output (`logs/meshcore_bot.log`) from around the time of the issue - Steps to reproduce **Security issues should not be filed publicly** — see [SECURITY.md](SECURITY.md) for private reporting. --- ## Archive: fixed bugs Historical record only. This section is not maintained going forward — see [CHANGELOG.md](CHANGELOG.md) for what shipped in each release. Note: the `26d18c1` and `ab72be9` references below predate a history rewrite and no longer resolve to commits in this repository. The descriptions are still accurate; only the hashes are stale. ### v0.9.0 (2026-04-17) | Reference | Summary | |-----------|---------| | Issue #83 | `KeyError('msg_hash')` asyncio parser spam fixed upstream by `meshcore >= 2.3.6` (new `meshcore_parser.py` guards with `'msg_hash' in l`). | | Issue #91 | Bot `!version` command added and version string shown in the web-viewer footer (`883b67d`, `fbf3995`). | | Issue #126 | `can't convert negative int to unsigned` on flood contacts fixed upstream by `meshcore >= 2.3.6` (out_path_len `-1` → `255` before packing). Defensive wire-field rebuild in `_ensure_contact_meshcore_path_encoding` (`ba52c3b`). | | Issue #161 | Shipped config templates lowered `max_response_hops` default from 10 → 7 to reduce flood-response amplification. | | Tests regression | Rewrote `test_subscribe_packets_emits_status_ack` / `test_subscribe_messages_emits_status_ack` to match the silent-UX contract introduced in `1ee84f2`. | | Python version | `requires-python` raised to `>= 3.10` in `pyproject.toml`; ruff target-version `py310`; CI matrix adds `3.13`. | | `e0eae09` (PR #123) | Fixed CI failures introduced by v0.9.0 push: (1) ruff — fixed import order, `Dict`→`dict`, and unused variable in `discord_bridge_service.py`; (2) mypy — added `types-requests` stub package to test deps, added `ignore_errors = true` per-module overrides for 19 not-yet-annotated modules; (3) ShellCheck SC2034 (unused vars) in `install-service.sh` / `uninstall-service.sh`, SC2155 (declare+assign) in `install-service.sh` / `restart_viewer.sh`, SC2010 (`ls\|grep`) replaced with glob loops in `docker-setup.sh`, SC2320 (`$?` capture after heredoc) in `docker-setup.sh` | | `92c5910` (PR #122) | Removed Python 3.9 from CI test matrix — `meshcore >=2.2.31` requires Python >=3.10 and is not installable on 3.9 | | `164dbae` | Refactored command aliases from global `[Aliases]` config section to per-command `aliases =` key in each command's own config section; `BaseCommand._load_aliases_from_config()` reads and injects aliases at startup; `CommandManager.load_aliases()` and `_apply_aliases()` removed | | `f971e97` | Fixed pre-existing test failure in `test_discord_bridge_multi_webhooks.py`: `ConfigParser` lowercases all config keys so `bridge.Public` is stored as `"public"` — test assertions updated to match actual lowercase key behaviour; runtime matching was already case-insensitive | | `26d18c1` | Fixed BUG-029 (third pass): Realtime monitor panels stuck at "Connecting…" — root cause was `