# TODO Task list for meshcore-bot development. Auto-updated sections are regenerated by running `python scripts/update_todos.py` (see [Auto-Update](#auto-update)). **Last updated:** 2026-03-29 — coverage at 36.86% (2,139 passed / 29 skipped); `fail_under=35`; target 40%; 25 PR branches pushed to KG7QIN fork (PRs #122–#124 open against agessaman:dev); CI matrix fixed (Python 3.9 removed, ruff/mypy/ShellCheck all green) --- ## In Progress - [ ] TASK-14: Push test coverage to ≥40% (currently **36.72%**, 2,140 passed / 29 skipped; `fail_under=35`; hardware-dependent modules cap realistic ceiling at ~40–42%) - [x] (2026-03-15) `tests/test_enums.py` — enum values and flag combinations - [x] (2026-03-15) `tests/test_models.py` — MeshMessage dataclass - [x] (2026-03-15) `tests/test_transmission_tracker.py` — full TransmissionTracker - [x] (2026-03-15) `tests/test_message_handler.py` — path parsing, cache, message routing - [x] (2026-03-15) `tests/test_repeater_manager.py` — role detection, ACL, device type - [x] (2026-03-15) `tests/test_core.py` — config loading, radio settings, reload - [x] (2026-03-15) `tests/test_feed_manager.py` — queue insert, deduplication via feed_activity, interval due-check - [x] (2026-03-15) `tests/test_scheduler_logic.py` — scheduled message dispatch, interval advertising setup - [x] (2026-03-15) `tests/test_command_manager.py` — full command dispatch, keyword matching - [x] (2026-03-15) `tests/test_channel_manager_logic.py` — cache lifecycle, fetch-all, sorted cache, connectivity guard - [x] (2026-03-16) `tests/test_channel_manager.py` — generate_hashtag_key, cache lookups, add_channel validation (47 tests) - [x] (2026-03-16) `tests/test_web_viewer.py` — 19 new tests for stream_data, update_channel, maintenance status (220 total) - [x] (2026-03-16) Fixed failing `test_weekly_on_wrong_day_does_not_run` — was patching `now` instead of `fake_now` **TASK-14 sub-tasks — prioritized target list (2026-03-16 coverage scan):** **Tier 1 — High impact, core logic:** - [x] T1-A: Realtime viewer panels blank bug — FIXED (third pass: root cause was `