* refactor: render chat rows from presentation state * Fix Meshtastic channel sync and add MeshCore CN preset * Add granular chat notification settings * Add SD settings backup and restore * Prepare 0.1.26-alpha release --------- Co-authored-by: vicliu624 <vicliu@outlook.com>
3.2 KiB
Post-Refactor Architecture Freeze
Purpose
This document freezes the directory and ownership rules after the Phase 8-12 refactor. It is a guardrail for future feature work, not a request for new architecture layers.
Directory Rules
| Directory | Frozen role | Allowed | Forbidden |
|---|---|---|---|
apps/ |
final product app shells | product startup shell, active UX pack selection, app-owned probes | legacy implementation roots, board-specific historical roots, runtime service implementation sprawl |
builds/ |
build entrypoints | thin build wrappers and build target selection | product implementation, UX decisions, renderer ownership |
modules/ |
stable runtime / presentation / renderer / descriptor modules | reusable presentation, runtime, descriptor, renderer-safe DTO, adapter ports | dependencies on apps/, product shell policy, board facts as UX policy |
platform/ |
platform / HAL / SDK adapters | platform-specific SDK and HAL boundaries | app shell behavior, UX selection, product feature policy |
boards/ |
hardware facts only | pins, capabilities, hardware descriptions | UX decisions, page/menu selection, runtime routing |
docs/ |
specifications, audits, reports | architecture records, phase reports, deletion readiness | executable runtime policy |
tools/architecture/ |
phase checkers and final guardrails | structural checker scripts | product behavior or build implementation |
Frozen Pipeline
New UI/runtime work should enter through this shape:
app shell -> UX pack -> presentation graph -> descriptor/adoption path -> renderer-safe consumption
Fallback may exist only as compatibility containment and must not become the default path again.
Explicit Prohibitions
- Renderers must not select UX packs.
- Runtime entries must not call
buildMenuForUxPack. - Runtime entries must not call
UxPackRegistryorfindUxPackById. - App shells must not create concrete runtime services such as chat, map, GPS, or protocol services.
- Board facts must not decide UX.
- Root
legacy/andlegacy/app_implementations/are forbidden. modules/must not depend onapps/.- Renderers must not create legacy services.
- GTK descriptor consumption must not create
GtkWidget. - LVGL descriptor consumption must not include
lvgl.h, createlv_obj_t, or branch onBOARD_. - New hardcoded page registries must not be primary sources.
- New
Legacy*bridges are forbidden for runtime work. - Active checkers must not require legacy roots to exist.
docs/archivemust not contain a source archive.- New
legacy_source_descriptorfiles are forbidden. - New transitional UI layers are forbidden.
Removed Legacy Roots
Root legacy/ has been removed. Historical legacy source roots are recorded
only in docs/archive/REMOVED_LEGACY_ROOTS.md. No active architecture layer may
be named legacy/.
Post-Freeze Work Classification
Future work should be classified as one of:
- feature work through the frozen pipeline
- targeted fallback deletion
- targeted deprecated alias deletion
- platform/build maintenance
- documentation/checker maintenance
It should not be classified as another broad architecture refactor unless the frozen ownership model is explicitly superseded.