XeWeCore 3.1.0

XeWeCore is the modular firmware core for ESP32, as one Arduino library: a serial console, a
"$group command" command line, typed NVS storage, small helpers and a module framework. Use it on
its own from the Arduino IDE, or through an xewe-os project (github.com/xewe-labs/xewe-os), whose
tools pull it in together with the ready-made modules.

3.1.0 follows 3.0.0 and is part of the XeWe OS 3.1 release set. It brings the unified
configuration scheme (doc/config.md), a per-component source layout with the reference
documentation next to the code, and the release card in place of the hand-written test card.

NEW

- Configuration. src/XeWeCore/Config.h holds the core's XEWE_CORE_* values in three sections:
  runtime defaults (serial baud, TX and RX buffer, startup delay, echo, banner), first-boot values
  (the device name) and compile-time constants (line buffer, line queue, timer tick). Every value
  keeps its previous default. A project's Config.h, a build define or a dotenv value through the
  tools overrides them. doc/config.md is the normative description for every XeWe OS repository.
- First-boot name. The prompt reads `Name your device (Enter for "xewe-device"):` and an empty
  answer takes the suggestion. A name set at build time (XEWE_CORE_DEVICE_NAME) skips the prompt
  and is written on the first boot. The boot header's first line is the device name.
- Build information. OsConfig::version and build_timestamp default to BUILD_VERSION and
  BUILD_TIMESTAMP from the tools' generated header when left empty, else "0.0.0" and empty.
- Layout. Sources live in per-component directories under src/XeWeCore/ (Cli, Serial, Nvs with
  FlexData, Settings, Module, Os, Testing, Utils), each with a README.md carrying its reference
  pages; doc/ keeps the guide, the index, the configuration spec, the library rules and the tests
  page. The public include contract is unchanged: <XeWeCore.h> and XeWeCore/Utils/*.h.
- Colour helpers. parse_hex_color and to_hex_color live in xewe::color (Utils/Color.h); the
  xewe::str names stay as using-declarations.
- Release card. scripts/release.sh --prepare records the host tests, lint, example builds and
  board run into releases/<version>/release_card.md, checked again by CI.

BREAKING

- OsConfig::project_name is removed; a sketch that sets .project_name no longer compiles.
- XEWE_DEVICE_NAME is renamed XEWE_CORE_DEVICE_NAME, with no alias.
- The first-boot name prompt text changed as described above; an empty name can no longer be
  stored through it.

FIXED

- The "line too long" notice follows the configured line buffer size.

INSTALL

- Arduino IDE: Library Manager, XeWeCore 3.1.0. Depends on ArduinoJson >=7.0.0 (tested 7.4.3).
- xewe-os projects: [core] ref = "3.1.0" in xewe.toml, then ./setup.sh. Built and tested with
  xewe-os-tools 3.1.2, arduino-cli 1.5.1 and esp32 core 3.3.12.

TESTING

What was tested, on which tree and with which result: release_card.md, generated by
scripts/release.sh --prepare 3.1.0 and attached to this release. Host tests: 100 (c++17) and
125 (gnu++2b). Board tests ran on an ESP32-C3; the C6 and S3 images were compiled, not run.
