diff --git a/src/modules/mod_bitchat_mesh.c b/src/modules/mod_bitchat_mesh.c
deleted file mode 100755
index cf56ade..0000000
--- a/src/modules/mod_bitchat_mesh.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * mod_bitchat_mesh.c -- OreBolt OS bitchat mesh networking module
- * ====================================================================
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- *
- * Copyright (C) 2026 OreBolt OS Contributors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- * --------------------------------------------------------------------
- *
- * WHY AGPL FOR THE BITCHAT LAYER?
- *
- * The bitchat mesh layer is the part of OreBolt OS that runs as a
- * networked service: nodes exchange messages with other nodes, and any
- * user interacting with a bitchat node over the mesh is effectively
- * interacting with the software "over a network" within the meaning of
- * AGPL v3 §13. AGPL v3 closes the SaaS loophole that GPL leaves open:
- *
- * * If someone forks this module, runs it on a modified bitchat node,
- * and lets other users interact with that node over the mesh, they
- * MUST make their modified source available to those users via the
- * "Written Offer" mechanism in §13(d). Pure GPL would not require
- * this for network-only interaction.
- *
- * * AGPL v3 §6 (User Product) also blocks tivoization on the device
- * itself: the H2 firmware must allow installation of modified
- * versions of bitchat.mod. This is exactly what we want for a
- * hackable pocket rig -- users own the device they carry.
- *
- * * The AGPL boundary is clean: bitchat is a single .mod binary that
- * links against liblvgl.so (MIT) and liborebolt.a (GPL-2.0-or-later).
- * Under AGPL v3 §13, the AGPL covers the bitchat module itself and
- * its modifications; it does NOT retroactively relicense the rest
- * of OreBolt OS because the rest of OreBolt OS is NOT a derivative work
- * of bitchat (bitchat links TO them, not the other way around).
- * See LICENSE.md §4 for the full boundary analysis.
- *
- * If you modify this file, you MUST:
- * 1. Keep this license header.
- * 2. Make your modified source available to anyone who interacts with
- * your modified bitchat node over the mesh (AGPL v3 §13).
- * 3. Bump the BITCHAT_PROTOCOL_VERSION if you change the wire format.
- *
- * The build system enforces an AGPL_BITCHAT preprocessor define so the
- * running binary self-identifies (see build.sh Phase 7 verify step).
- * --------------------------------------------------------------------
- */
-
-#ifdef AGPL_BITCHAT
-
-#include
-#include
-#include
-
-#include "h2_ui.h"
-#include "log_manager.h"
-#include "panic_purge_api.h"
-
-#define BITCHAT_PROTOCOL_VERSION 1
-#define BITCHAT_LICENSE_STRING "AGPL-3.0-only"
-#define BITCHAT_SOURCE_URL "https://example.invalid/orebolt-bitchat-src"
-/* ^ Replace with the actual Written Offer URL before shipping. AGPL v3 §13(d). */
-
-/* Mesh message types -- wire format is little-endian, packed. */
-typedef enum {
- BITCHAT_MSG_HELLO = 0x01,
- BITCHAT_MSG_ACK = 0x02,
- BITCHAT_MSG_BROADCAST= 0x03,
- BITCHAT_MSG_DIRECT = 0x04,
- BITCHAT_MSG_PURGE = 0xFE, /* used by panic_purge_api.h */
- BITCHAT_MSG_LICENSE = 0xFF /* AGPL v3 §13 -- advertise source URL */
-} bitchat_msg_type_t;
-
-#pragma pack(push, 1)
-typedef struct {
- uint8_t magic[4]; /* "BTCH" */
- uint8_t protocol_ver;
- uint8_t msg_type;
- uint16_t payload_len;
- uint32_t sender_id;
- uint32_t timestamp;
- /* payload follows */
-} bitchat_hdr_t;
-#pragma pack(pop)
-
-#define BITCHAT_MAGIC ((uint8_t[]) {'B','T','C','H'})
-
-static lv_obj_t *bitchat_screen = NULL;
-static lv_obj_t *bitchat_log_label = NULL;
-
-/* Build a license-advertisement message. Sent on every mesh HELLO so
- * any user interacting with this node over the network is informed of
- * their AGPL v3 §13 source-code rights. */
-static size_t bitchat_build_license_msg(uint8_t *out, size_t cap)
-{
- const char *url = BITCHAT_SOURCE_URL;
- size_t url_len = strlen(url);
- if (cap < sizeof(bitchat_hdr_t) + url_len + 1) return 0;
-
- bitchat_hdr_t *h = (bitchat_hdr_t*)out;
- memcpy(h->magic, BITCHAT_MAGIC, 4);
- h->protocol_ver = BITCHAT_PROTOCOL_VERSION;
- h->msg_type = BITCHAT_MSG_LICENSE;
- h->payload_len = (uint16_t)(url_len + 1);
- h->sender_id = 0; /* TODO: device-unique ID from MAC */
- h->timestamp = 0; /* TODO: RTC */
- memcpy(out + sizeof(bitchat_hdr_t), url, url_len + 1);
- return sizeof(bitchat_hdr_t) + url_len + 1;
-}
-
-/* LVGL UI: a single screen with a scrollable log and a "Send Hello" button. */
-void bitchat_init(lv_obj_t *parent)
-{
- bitchat_screen = lv_obj_create(parent);
- lv_obj_set_size(bitchat_screen, H2_LCD_WIDTH - 4, H2_LCD_HEIGHT - 4);
- lv_obj_center(bitchat_screen);
-
- bitchat_log_label = lv_label_create(bitchat_screen);
- lv_label_set_text(bitchat_log_label,
- "bitchat mesh v" STRINGIFY(BITCHAT_PROTOCOL_VERSION) "\n"
- "License: " BITCHAT_LICENSE_STRING "\n"
- "Source: " BITCHAT_SOURCE_URL "\n"
- "(idle)");
- lv_obj_set_width(bitchat_log_label, H2_LCD_WIDTH - 16);
- lv_label_set_long_mode(bitchat_log_label, LV_LABEL_LONG_WRAP);
-
- LOG_INF("bitchat init: protocol=%d license=%s",
- BITCHAT_PROTOCOL_VERSION, BITCHAT_LICENSE_STRING);
-
- /* Advertise source URL on first mesh hello. */
- uint8_t buf[256];
- size_t n = bitchat_build_license_msg(buf, sizeof(buf));
- if (n > 0) {
- /* TODO: mod_radio_input_multiplex_send(buf, n); */
- LOG_DBG("queued license-advertisement msg (%zu bytes)", n);
- }
-}
-
-void bitchat_deinit(void)
-{
- if (bitchat_screen) {
- lv_obj_del(bitchat_screen);
- bitchat_screen = NULL;
- bitchat_log_label = NULL;
- }
- LOG_INF("bitchat deinit");
-}
-
-/* Helper macro for the version string in the UI label. */
-#define STRINGIFY_(x) #x
-#define STRINGIFY(x) STRINGIFY_(x)
-
-#else /* !AGPL_BITCHAT */
-# error "mod_bitchat_mesh.c must be compiled with -DAGPL_BITCHAT (see Makefile.orebolt-v1.5). \
- This guard prevents accidental compilation under a different license."
-#endif /* AGPL_BITCHAT */