Fix branch-clone, rounding, cast, and remaining long-tail findings
- bugprone-branch-clone (12): fold genuinely identical switch arms
(typing status map, PM1 power levels, wake-cause names, glyph
fallback), merge the duplicated small-panel atlas ladder, rebuild
scaleFor as per-panel constexpr scale tables (lookup-table idiom),
restructure the modal confirm poll around explicit hold/press
predicates (also clears the DeMorgan finding), and NOLINT the one
per-SoC gated ADC calibration switch with rationale.
- bugprone-casting-through-void (13): use direct reinterpret_cast (the
documented pro-type-reinterpret-cast deviation) for byte/sockaddr
views; keep the SPI slot two-step through void* with rationale (it
exists to satisfy -Werror=cast-align next to the static_asserts).
- bugprone-incorrect-roundings (9): std::lroundf instead of +0.5 casts.
- cert-dcl50-cpp (5): rationale NOLINTs on the printf-style formatters
(a parameter pack cannot produce the va_list vsnprintf needs).
- cppcoreguidelines-pro-type-const-cast: const-correct the WordReader
ctx (API + trampoline + tests, const_cast deleted); NOLINT the two
std <cstring>-convention mutable overloads.
- Long tail: explicit void* casts + sizeof(T) rationale in rtos_queue,
range-for loop conversions, 0x80-mask instead of int8_t reinterpret
for the AXP2101 gauge, uint8_t slot subscript, parenthesized -1 pin
macros, extended the __wrap_log_printf ABI suppression to the
reserved-identifier aliases, integer-center tween targets.
Claude-Session: https://claude.ai/code/session_01SV58JXhfxhhc9DC6vdjBo4
docs: restore the Doxygen gate to exit 0 (pages workflow red since the KDF merge)
Doc-comment-only changes, no code touched. `doxygen Doxyfile` (1.17.0, the
version CI pins) has been failing on main with 42 errors, keeping the
GitHub Pages deploy red. Two error classes:
- Unresolvable @ref targets (file-level-block refs to members/forward
declarations, .cpp-internal constants, enum-class enumerators) replaced
with @c in pin_policy.h, export_passphrase.h, secure_allocator.h,
vault_import.h and vault_meta.h.
- Missing @param/@return blocks completed: SecureAllocator::deallocate /
::reallocate, web::adminsd::handleSdVaultImport, web::isCsvTrimChar,
and CsvRow::appendChar / nextField / field.
doxygen Doxyfile now exits 0 with zero warnings and
scripts/check_doc_coverage.py reports full coverage.
Claude-Session: https://claude.ai/code/session_01JW42m5zhzTUT8eapHvSvPB
Retire LVGL entirely (HAS_LVGL gone)
The T-Deck was the only LVGL device and now renders through the in-house UI
library (verified on hardware), so every #if HAS_LVGL branch is dead. Remove the
framework wholesale:
- Delete src/ui/lvgl/ (25 files: hal, input, screen_manager, theme, demo,
brand_mark, and the per-screen lvgl_*_screen set) and
src/ui/popup/lvgl_popup_adapter.{cpp,h}.
- Delete src/ui/core/render_task.{cpp,h} (the lv_timer_handler worker + LVGL
recursive mutex; every caller was LVGL-gated) and variants/tdeck/lv_conf.h.
- Delete src/hal/common/display_hal_tft.cpp (the HAS_LVGL && ST7789 backend);
the T-Deck now links display_hal_m5.cpp (BL pin >= 0, identical brightness path).
- De-gate ~25 source files: drop the dead HAS_LVGL branch, keep the live
in-house / HAS_KEYBOARD branch.
- Remove the HAS_LVGL macro (variants/tdeck/variant.h and the platform_defaults.h
default) and the lvgl/lvgl @ 9.2.2 lib_dep + LV_CONF flag in tdeck.ini.
- Update docs (groups.dox, building, ui/, design-system) and CLAUDE.md /
copilot-instructions to reflect that LVGL is retired fleet-wide.
Font tooling (scripts/fonts lv_font_conv) and descriptive lineage comments
(e.g. "raster replacement for lv_textarea") are kept. Full fleet builds green;
native 1075/1075; pio check clean; no HAS_LVGL/lvgl runtime reference remains.
Fix all readability-identifier-naming findings and the heal-surfaced defects
Rename every identifier flagged by the .clang-tidy naming policy: file-scope
and function-local statics gain the s_ prefix, static class members of
BleHidManager and AdminPortal move from bare/member-style names to s_ camelBack,
static/constexpr constants take k + PascalCase (kDummies, kNames, kDemos,
kEventNames, kAdvHidUuid, the generated AaFont atlas symbols), snake_case
parameters/locals in secure_allocator become camelBack, the OKLab intermediates
in gradient.cpp get real names, and the mbedtls_aes_context compat alias is
retired in favor of VaultAesContext at every call site. The AaFont symbol
rename is applied in the generator (scripts/fonts/convert_fonts.py) and
mirrored into the generated files. External ABI contracts that cannot be
renamed (app_main, NimBLE C symbols, the __wrap_ linker prefix, the
std-container/std::string API spellings of InplaceVector/InplaceString) are
NOLINT-suppressed with rationale.
Also fix what the healed parse newly surfaced: brace-init the va_list locals
flagged by cppcoreguidelines-init-variables and use auto for the two
static_cast initializers in totp_screen_controller, and rename the s_-prefixed
range-for loop variables in bond_store, name_store_task, and ble_event_bus.
clang-tidy: 239 -> 117 findings; identifier-naming, init-variables, and
use-auto are now at zero.
Claude-Session: https://claude.ai/code/session_01SV58JXhfxhhc9DC6vdjBo4