6235fa0541f7ed9d81cd5f457b6c4480651d6b2e
DisplayIdle::tick() runs every 50ms. After startMcpScreensaver() sets displayDimmed=true, the next tick saw inactive_ms < 100ms (user navigated Settings) and called stopScreensaver() -> overlay deleted in <1s, text tool flash-then-back. Root cause: idle wake logic (inactive<100ms) + charging guard + duty-restore all operated on any overlay including MCP override. Fix: detect MCP active via (drawArea != nullptr || overrideActive) under state.mutex, guard all auto-stop paths with !isMcpActive. MCP still closable via click handler on overlay (CLICKABLE flag). Test: flash es3c28p 2be0c0 31% free to /dev/cu.usbmodem101 192.168.68.113 dashboard 200, dev 6666 ok, /api/mcp 25 tools. Requires PYTHONPATH cleaned for idf.py build (Hermes venv hijacks pydantic_core).
Overview
Tactility is an operating system that focuses on the ESP32 microcontroller family.
See https://tactilityproject.org for more information.
You can run built-in apps or start them from an SD card. It's easy to manage system settings:
License
Description
Languages
C++
65%
C
28.9%
Python
3.5%
CMake
1.4%
HTML
1.1%



