Commit Graph
27734 Commits
Author SHA1 Message Date
J. Nick Koston dcdde00559 Merge branch 'dev' into fan-store-preset-modes-on-entity 2026-03-26 17:40:28 -10:00
J. Nick Koston 61597e304b Merge branch 'dev' into lock-trigger-trampoline 2026-03-26 17:39:33 -10:00
Edward Firmoandpre-commit-ci-lite[bot] 6feb2d04df [nextion] Replace static std::string COMMAND_DELIMITER with constexpr (#15195)
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2026-03-26 17:36:35 -10:00
J. Nick Koston 0221db0f13 Merge branch 'dev' into fan-store-preset-modes-on-entity 2026-03-26 17:06:40 -10:00
J. Nick Koston 05a5c27b90 Add 2026.11.0 removal comments to integration test and fixture 2026-03-26 16:21:30 -10:00
J. Nick Koston 91932ed919 Merge branch 'dev' into ld2450-trigger-trampoline 2026-03-26 16:20:33 -10:00
J. Nick Koston 592371f9f6 Add 2026.11.0 removal comments to integration test and fixture 2026-03-26 16:20:32 -10:00
J. Nick Koston cfbba0af90 Add comment about string literal pointer stability in compat save_state_ 2026-03-26 16:18:01 -10:00
J. Nick Koston 0b68b497bb Move demo custom modes to setup(), simplify Midea frost protection
- Demo: custom fan modes and presets now set once in setup() instead
  of on every traits() call, matching bedjet/thermostat pattern
- Midea: frost protection merge only calls get_traits() once (guarded
  by frost_protection_set_ flag), not on every status change
2026-03-26 16:17:13 -10:00
J. Nick Koston b5df9de79b Remove unnecessary get_setup_priority from test fixture 2026-03-26 16:08:08 -10:00
J. Nick Koston 541ab9abf9 Fix fan test: use fan_schema(), remove unnecessary get_setup_priority 2026-03-26 16:07:20 -10:00
J. Nick Koston 90dafa3fa4 [logger] Warn when VERBOSE/VERY_VERBOSE logging is active (#15189) 2026-03-27 01:59:58 +00:00
J. Nick Koston eaa7659285 Fix Midea preset merge, fix get_supports_fan_modes precedence
- Midea: merge frost protection into existing custom presets instead
  of overwriting (fixes potential loss of user-configured presets)
- get_supports_fan_modes(): use same precedence as getter — if pointer
  is set, only check pointer; fall back to compat only when unset
2026-03-26 15:58:23 -10:00
J. Nick Koston 794b7ef562 Fix supports_preset_modes: use same precedence as getter 2026-03-26 15:55:49 -10:00
J. Nick Koston a3f5458ae3 Fix unused services variable in test 2026-03-26 15:54:54 -10:00
J. Nick Koston 7513db9dcd Fix clang-tidy: protected method needs trailing underscore 2026-03-26 15:50:10 -10:00
J. Nick Koston 863dc62dae Fix clang-tidy: protected methods need trailing underscore 2026-03-26 15:48:50 -10:00
J. Nick Koston 3388d420ec Fix unused services variable in test 2026-03-26 15:42:36 -10:00
J. Nick Koston 7591f1d473 Add deprecated array overloads for compat, fix Copilot review 2026-03-26 15:41:47 -10:00
J. Nick Koston 7c259d2f64 Simplify save_state_ compat path, move CopyFan preset copy to setup()
- save_state_(): split into two clear branches instead of conditional
  FanTraits construction trick
- CopyFan: copy source preset modes once in setup() instead of on
  every get_traits() call
2026-03-26 15:39:29 -10:00
J. Nick Koston 317db8438c Move set_supported_custom_* out of traits() hot path
- Midea: frost protection preset now set once in on_status_change()
  when autoconf completes, guarded by a flag
- BedJet: custom fan modes and presets moved from traits() to setup()
- Test fixture: use has_custom_fan_mode() instead of nullptr check
2026-03-26 15:36:56 -10:00
J. Nick Koston 3328423373 Move pointer setter to protected with friend class Fan 2026-03-26 15:31:27 -10:00
J. Nick Koston d54fd0ef69 Move pointer setters to protected (friend-only), add missing vector include 2026-03-26 15:29:57 -10:00
J. Nick Koston 95cdc90835 Fix to_code signature: add ConfigType annotation 2026-03-26 15:27:20 -10:00
J. Nick Koston 1c054db1f1 Fix to_code signature: add ConfigType annotation 2026-03-26 15:26:51 -10:00
J. Nick Koston 576b1c3ff0 Fix fan fixture: use C++17 namespace style 2026-03-26 15:25:13 -10:00
J. Nick Koston 991c34a4f3 Fix fixtures: remove unnecessary build flags, use C++17 namespace style 2026-03-26 15:24:38 -10:00
J. Nick Koston c8d842586a Fix fan fixture: remove unnecessary build flags 2026-03-26 15:23:44 -10:00
J. Nick Koston 2f93ba0d71 Add integration test for deprecated FanTraits compat layer 2026-03-26 15:21:11 -10:00
J. Nick Koston 602bcd2c97 Add integration test for deprecated ClimateTraits compat layer 2026-03-26 15:19:45 -10:00
J. Nick Koston e77cdb5971 [light] Validate effect names during config validation instead of codegen (#15107) 2026-03-26 15:13:44 -10:00
J. Nick Koston 90e6c0d7c7 [core] Remove indirection from ControllerRegistry dispatch (#15173) 2026-03-26 15:09:16 -10:00
J. Nick Koston 240e53afce [fan] Add benchmarks for fan component (#15210) 2026-03-26 14:35:09 -10:00
J. Nick Koston 413202e02e Restore deleted std::string overloads for clear compile-time diagnostics 2026-03-26 14:31:06 -10:00
J. Nick Koston c42cfac50f Fix dangling reference in save_state_, restore deleted string overloads
1. save_state_() bound a reference to supported_preset_modes() from
   a temporary FanTraits returned by get_traits(). When the compat
   path fired, the temporary was destroyed and the reference dangled.
   Fix: keep the FanTraits alive for the loop duration.

2. Restore deleted std::vector<std::string> / initializer_list<std::string>
   overloads to preserve clear compile-time diagnostics.
2026-03-26 14:28:55 -10:00
J. Nick Koston 027cb0c35c Fix compat: use owned vectors instead of heap leak
Replace new-and-leak deprecated setters with plain owned vector members
on ClimateTraits. Copies copy the vector (same cost as before this PR).
No heap leak, no dangling pointer, no smart pointer overhead.

All compat paths (getters, find, supports) check the owned vector as
fallback when the pointer path is not set.
2026-03-26 14:11:15 -10:00
J. Nick Koston 56f0d3f7f5 Fix compat: use owned vector instead of leak, wire preset modes in subclasses
- Deprecated FanTraits setters store in an owned compat_preset_modes_
  vector (same copy cost as pre-PR). No heap leak, no dangling pointer.
- Subclass get_traits() calls wire_preset_modes_() to attach the
  Fan-owned pointer to the returned traits.
- Getter/find/supports all check compat vector as fallback.
2026-03-26 14:08:07 -10:00
J. Nick Koston 4838c61a8c Move preset modes pointer to private, consolidate empty vector to cpp
- Move supported_preset_modes_ pointer and ensure helper to private
- Move static EMPTY_VECTOR from inline header getter to a single
  file-scope constant in fan.cpp (avoids duplication per TU)
- Add 2026.11.0 removal comments on all compat code paths
2026-03-26 14:02:27 -10:00
J. Nick Koston ebc4421ba6 Move custom mode pointers to private, consolidate empty vector to cpp
- Move supported_custom_fan_modes_ and supported_custom_presets_ pointers
  and ensure helpers to private section
- Move static EMPTY_VECTOR from inline header getters to a single
  file-scope constant in climate_traits.cpp (avoids duplication per TU)
- Add 2026.11.0 removal comments on all compat code paths
2026-03-26 14:01:08 -10:00
J. Nick Koston df8edfe346 Merge branch 'dev' into alarm-control-panel-trigger-trampoline 2026-03-26 13:53:12 -10:00
J. Nick Koston 2d56b089ed Merge branch 'dev' into lock-trigger-trampoline 2026-03-26 13:53:03 -10:00
J. Nick Koston 147c96ce33 Merge branch 'dev' into safe-mode-trigger-trampoline 2026-03-26 13:52:52 -10:00
J. Nick Koston 0fb9699257 Merge branch 'dev' into ld2450-trigger-trampoline 2026-03-26 13:52:41 -10:00
J. Nick Koston 5be5f16662 Fix compat: heap-allocate deprecated vector, add find fallback
Two bugs fixed from Copilot review:

1. Dangling pointer on copy: deprecated setters stored data in an
   OwnedPresetModes struct on FanTraits. If the traits object was
   copied, the copy's pointer dangled. Fix: deprecated setters now
   heap-allocate (intentional leak). Pointer survives any copy.
   Remove the OwnedPresetModes wrapper entirely.

2. find_preset_mode_ / save_state_ only searched the Fan-owned
   vector, breaking external components using the deprecated traits
   setters. Fix: fall back to get_traits() when the entity vector
   is null.
2026-03-26 13:52:41 -10:00
J. Nick Koston 5ea1c08975 Merge branch 'dev' into media-player-trigger-trampoline 2026-03-26 13:52:30 -10:00
J. Nick Koston 79228c7c0e Merge branch 'dev' into rtttl-trigger-trampoline 2026-03-26 13:52:22 -10:00
J. Nick Koston fa8a609bcc [automation] Eliminate trigger trampolines with deduplicated forwarder structs (#15174) 2026-03-26 13:50:50 -10:00
J. Nick Koston 5a9e55707b Fix compat: heap-allocate deprecated vectors, add find fallback
Two bugs fixed from Copilot review:

1. Dangling pointer on copy: deprecated setters stored data in an
   OwnedCustomModes struct on ClimateTraits. If the traits object was
   copied (when NRVO doesn't apply), the copy's pointer dangled.
   Fix: deprecated setters now heap-allocate (intentional leak, same
   pattern as Climate entity). Pointer survives any copy. Remove the
   OwnedCustomModes wrapper entirely.

2. find_custom_fan_mode_ / find_custom_preset_ only searched the
   Climate-owned vectors, breaking external components using the
   deprecated traits setters. Fix: fall back to get_traits() when
   the entity vector is null.
2026-03-26 13:50:18 -10:00
J. Nick Koston 554d97ff04 Fix clang-tidy: add braces around if statements, extract ensure helper 2026-03-26 13:33:15 -10:00
J. Nick Koston c283e11ffa Fix clang-tidy: add braces around if statements, extract ensure helpers 2026-03-26 13:32:32 -10:00