Releases: ksk-lizdeika/MeshCore
Release list
AIDAS9 aidas9-v0.1.0-pre.1 — Lizdeika Edition
AIDAS9 — Messages Beyond Infrastructure
A complete, device-first MeshCore experience for the LILYGO T-Echo Lite
This pull request introduces AIDAS9 — Lizdeika Edition, a feature-complete companion-radio experience built on MeshCore for the LILYGO T-Echo Lite Kit.
AIDAS9 turns the T-Echo Lite's 128 × 128 e-paper display and physical keypad into a purposeful, self-contained communicator. Messages, contacts, rooms, radio state, device health, notifications, and network actions now live in one coherent interface designed for the realities of off-grid hardware: slow-refresh displays, constrained memory, intermittent phone connectivity, and operation without touchscreens or permanent infrastructure.
This is more than a new skin. It is a complete product-level UI, messaging, persistence, observability, testing, and release system for carrying MeshCore in your pocket.
Important
AIDAS9 is independent community firmware maintained by KSK Lizdeika. It is based on MeshCore, but is not an official MeshCore or LILYGO product.
The headline features
A standalone e-paper communicator
- A purpose-built 128 × 128 static e-paper interface with no animation or idle refresh churn.
- A six-destination Home carousel for Messages, Contacts, Radio, Advert, Device, and Settings.
- Large iconography, clear focus states, bounded typography, safe-area-aware layouts, and non-wrapping ordinary lists.
- Faster navigation through partial e-paper refreshes, with full refreshes retained where panel cleanliness requires them.
- First-key wake behavior: the key that wakes a sleeping display is consumed instead of accidentally triggering an action.
Messaging that feels native to the device
- Channel and private-conversation browsing directly on the radio.
- One message per screen, with Up/Down chronological paging and a scrollbar showing position in the full conversation.
- The local operator appears as a normal, left-aligned participant under the configured node handle—never as a synthetic “Mine” identity.
- Multiline messages, including ASCII art, are measured and highlighted as a complete entry.
- A single, unambiguous envelope-led New message action replaces redundant reply/delete footer controls.
- Full message details retain route hops, RSSI, and SNR when available.
- The newest outgoing message remains visible after a successful send, even when durable storage reports a failure.
A physical-keyboard composition model
- Contextual Mail-key behavior: compose or send only when the current screen has an unambiguous recipient.
- Mail never acts as global navigation and never deletes content.
- T9-style composition with a static e-paper cursor and a strict 150-character message limit.
- Per-conversation draft caching keyed by full identity, including cursor restoration.
- Failed sends preserve the complete draft; successful sends clear it and return to the conversation.
- Non-empty drafts require explicit confirmation before discard.
Durable offline messaging and clean phone handoff
- A versioned offline-queue journal with durable, monotonic message sequences.
- Checksummed, sequence-keyed tombstones are written before drained or deleted messages leave RAM.
- Boot replay applies tombstones before the UI begins, preventing acknowledged messages from reappearing after reboot or firmware reflash.
- Backward-compatible recovery for legacy queue records and idempotent legacy removals.
- Incoming messages and outgoing channel messages drain to a connected companion client and disappear from the device once acknowledged.
- Outgoing private messages remain local until the companion protocol can represent direction without misattributing the sender.
- A fixed-capacity, allocation-conscious message store and portable journal/record codec provide a clean path for future long-term archive expansion without compromising the release's delivery-queue lifecycle.
Real unread state and stable identity
- Persistent read watermarks per conversation, using durable sequences with timestamp fallback for legacy state.
- Incoming messages contribute to unread totals; outgoing messages do not.
- Read state survives reboot and remains monotonic through deletion and queue changes.
- Conversations, drafts, credentials, details, and destructive actions use full stable identities rather than mutable names or list positions.
- Message detail and deletion resolve the durable sequence at action time, preventing a concurrent phone drain from redirecting the operation.
Rooms and credentials designed for trust
- Explicit room actions and a dedicated password-entry flow.
- Passwords are masked by default and revealed only through a deliberate action.
- Room credentials are keyed by the room's full public key, not its display name.
- Credentials are remembered only after a positive login response and cleared when a room is removed or replaced.
- Pending, successful, rejected, and timeout states are surfaced to the operator.
Notifications rebuilt around events
- Independent notification behavior for the supported message and system triggers.
- A persistent 2 × 7 effect matrix stored separately from read state and room credentials.
- Immediate save feedback and LED preview for the selected behavior.
- Checksummed versioned records, safe defaults for corrupt data, and migration from the earlier monolithic pre-release record.
Radio and device observability
AIDAS9 exposes the information operators and developers need in the field, without requiring a serial console:
- Frequency, bandwidth, spreading factor, coding rate, TX power, boosted gain, path-hash mode, and airtime configuration.
- RSSI, SNR, calibrated noise floor, link margin, last-packet age, receive state, and recent advert state where supported.
- Packet, error, flood/direct traffic, accumulated airtime, outbound queue, and packet-pool counters.
- Stored-message, unread, contact, channel, recently-heard, and contact-category counts.
- Node identity and truncated public-key fingerprint.
- Battery voltage and percentage, external power, uptime, reset reason, temperature, Bluetooth state, capacity, and active error information where available.
- Explicit validity flags ensure unsupported or stale telemetry renders as unavailable instead of fabricated data.
Safety and resilience throughout the interface
- Destructive actions require contextual confirmation and default to Cancel.
- Navigation-stack overflow preserves the current page rather than corrupting navigation state.
- Empty channels, conversations, and contact categories receive specific, useful empty states.
- Recoverable temporary/backup persistence writes reduce exposure to interrupted updates.
- Read-state writes are debounced and flushed before display sleep, shutdown, or restart.
- No synchronous LittleFS traversal is performed while rendering device status on nRF52.
Built for release, not just for a development bench
This PR also adds the machinery needed to ship AIDAS9 consistently:
- A dedicated GitHub Actions firmware build for
LilyGo_T-Echo-Lite_companion_radio_ble. - Downloadable UF2 and serial-DFU artifacts for pull requests and manual workflow runs.
aidas9-v*tags create a draft GitHub prerelease with firmware attached.- A deterministic visual-audit generator covering 116 distinct 128 × 128 UI states.
- Expanded native tests for menu behavior, unread ordering, drafts, persistence codecs, queue policy, durable tombstones, and message-store behavior.
- The complete native test suite passes.
- The target firmware builds at approximately 71.7% RAM and 63.8% flash utilization.
- Multiple development builds have been successfully flashed and activated on physical T-Echo Lite hardware through serial DFU.
Feature manifest
| Area | What ships in this PR |
|---|---|
| Product | AIDAS9 — Lizdeika Edition identity, splash, About attribution, source disclosure, and release positioning |
| Hardware | LILYGO T-Echo Lite companion-radio target, 128 × 128 e-paper, physical keypad |
| Navigation | Home carousel, bounded lists, preserved parent selection, wake-key consumption |
| Messaging | Channels, private conversations, one-message paging, details, unread counts, compose/send flows |
| Persistence | Versioned settings, read state, room credentials, offline queue sequences, tombstones, recovery |
| Connectivity | BLE companion draining with explicit direction-safe policy |
| Rooms | Password entry, deliberate reveal, stable-key credentials, login-state feedback |
| Notifications | Persistent trigger/effect matrix with preview and save feedback |
| Status | Deep radio, network, identity, queue, battery, system, and capacity telemetry |
| E-paper | Static cursor, bounded text, safe areas, reduced redraw cost, deterministic visual audit |
| Delivery | CI firmware artifacts, tagged draft prereleases, UF2 and serial DFU packages |
| Quality | Native regression suite, portable codecs, state helpers, queue-policy tests, hardware build/flash validation |
Release status and forward compatibility
The AIDAS9 feature set defined for this release is complete. The remaining work is release qualification, broader field testing, and deliberately scoped future expansion—not missing core functionality.
- The completed firmware has been built, flashed, activated, and iteratively corrected on physical T-Echo Lite hardware; the extended keypad/display and BLE regression matrix continues as release qualification.
- Outgoing private messages intentionally remain on-device because the current companion frame cannot preserve their direction safely. This is a protocol-compatibility safeguard, not a partially implemented drain path.
- Long-term filesystem-backed conversation archives are a future expansion beyond this release's...