Add variant-config consistency and editorconfig gates
Add scripts/check_variants.py, a pure-stdlib validator that enforces device
variant consistency: extra_configs registration (no orphans), required keys
on base variants, sdkconfig/partition reference integrity, the shared
sdkconfig.defaults.kleidos_ble include, -I variants/<dir> include paths,
flash-size agreement, unique env names, and KLEIDOS_BRANDS_* presence/ranges.
CoreInk is allowlisted as intentionally unregistered.
Add .ecrc to drive editorconfig-checker: disable the noisy IndentSize rule
(clang-format already governs C/C++ indentation) and exclude generated,
vendored, and binary trees. Normalize the tree to satisfy the remaining
checks: convert leading tabs to spaces in platformio.ini, six variant .ini
files, src/CMakeLists.txt, and scripts/run_include_cleaner.sh, and add final
newlines to .markdownlint.json, the CAD bounding-boxes JSON, and
AudioFeedbackSpeaker.cpp.
Wire both as blocking gates: variant-config-guard and editorconfig-checker
pre-commit hooks (ec pinned to 3.0.3) plus editorconfig and variants CI jobs.
No functional changes; sticks3 build and 428 native tests pass.
Photo-verify device fronts and correct screen and button measurements
Overlay-check every front.svg against real device photos (owner photos
for sticks3/cores3-se/coreink/cardputer-adv/tdeck-plus, repo reference
photos for the rest) and correct the generator geometry: datasheet-true
active areas everywhere (Gray's LCD was drawn square), CoreS3 SE / Core2
Power and Reset moved to the owner-measured left-edge/bottom-edge spots,
Core2 touch dots at x 12/25/38.5 y 45, Gray's single Power/Reset at
13 mm on the left edge, all Stick screens at 4-5 mm below the case top,
CoreInk confirmed with no front dial (jog wheel on the right edge),
T-Deck chevrons pointing inward at the centered trackball, Plus2 BtnA
unified with Plus1's press-point geometry (identical chassis).
Reconcile measurements.json with the photo evidence (CoreInk origin_y,
Core2 origin_y, T-Deck converted to a case-top vertical datum) and drop
the obsolete non-Plus tdeck from the generator registry.
Claude-Session: https://claude.ai/code/session_01SV58JXhfxhhc9DC6vdjBo4
Standardize spelling to US English with typos gate
Add crate-ci/typos as a blocking spell-check gate for code, comments, and
docs, wired into pre-commit and the Code Quality CI workflow (pinned to
1.47.2 across local/CI/pre-commit). Configure .typos.toml with en-us
locale, a project/hardware dictionary (kleidos, axp, dout, bclk, ...),
protected identifiers (shake_thr NVS key, thr100, ser, MKFS_PARM), a MAC
address ignore regex, and exclusions for generated/binary/vendor trees.
Scan dotfiles so the CLI matches the hook.
Convert British spellings to American across the tree (colour->color,
centre->center, initialise->initialize, behaviour->behavior, favourite->
favorite, ...). Rename the i18n VAULT_FAVORITE id/StringId and update its
sole reference. No functional changes.
Review ADRs and design/brand/hardware docs for accuracy
Remove stale LVGL, M5GFX, M5Unified, and M5RuntimeButtonInput terminology
from design and hardware device docs; all these were retired fleet-wide.
- docs/design/font-integration.md: drop stale "LVGL fonts" and "M5GFX-backed
path" prose; rename T-Deck LVGL column to T-Deck 320x240; update
Implementation Path to reference the direct-HAL renderer and generated AA
fonts instead of M5GFX.
- docs/design/mockups_v2/README.md: replace M5GFX/LVGL typography description
with current direct-HAL + AA atlas pipeline; drop LVGL reference from next
firmware steps.
- docs/design/ui-iteration-handoff.md: remove "LVGL compile/display" label
from T-Deck row; correct T-Deck and CoreS3 SE status lines (LVGL gone, FT6x36
driver owns touch zones, not M5Unified); update checklist step 5.
- docs/hardware/cad-sources/_shared/schema.md: replace M5.Display.setRotation()
with DISPLAY_ROTATION / display::setRotation().
- docs/hardware/devices/m5core-ink.md: replace HAS_M5UNIFIED=1 / M5GFX row in
Firmware table with correct ESP-IDF / epaper_panel_driver facts; update two
migration notes.
- docs/hardware/devices/core2-v13.md: remove M5RuntimeButtonInput and M5Unified
bridge references; reflect current M5TouchButtonInput + FT6x36 reality.
- docs/hardware/devices/cores3-se.md: remove M5Unified touch-zone claim; reflect
M5TouchButtonInput + FT6x36 driver.
- docs/hardware/devices/m5stickc-plus1.md, m5stickc-plus2.md, m5stack-gray.md:
remove "M5Unified adapter/power adapter" wording from HAS_AXP2101 migration
notes; explain the flag selects the AXP-shaped Kleidos driver path.
ADRs (0001, 0002), brand-logos.md, code-style-guide.md, device-mechanics-cad.md,
and the remaining hardware device docs required no changes.
Claude-Session: https://claude.ai/code/session_01Y7Cy1HetRp6TZAUAeekN8X