v0.8.9
This commit is contained in:
+10
-38
@@ -1,43 +1,15 @@
|
||||
# GREE Controller v0.8.7 - audit remediation and cleanup report
|
||||
# GREE Controller v0.8.9 - remote takeover diagnostics report
|
||||
|
||||
Source baseline: GREE Controller v0.8.5 audited on 2026-08-28.
|
||||
Source baseline: GREE Controller v0.8.8.
|
||||
|
||||
## Implemented remediation
|
||||
## Changes
|
||||
|
||||
This build addresses the ownership, safety, lifecycle and scheduling findings from the v0.8.5 control-logic audit, including the critical K1-K9 findings and high-priority H1-H14 findings.
|
||||
- removed the v0.8.8 debounce/confirmation heuristic that required an unexpected post-command GREE state to survive two polls;
|
||||
- restored the previous controller-settling rule: only values matching a recent controller command or its pre-command baseline are suppressed; any other changed control field is immediately eligible for manual/pilot takeover;
|
||||
- added an explicit `device.remote_control_detected` event before a poll-detected takeover is persisted;
|
||||
- diagnostic metadata contains raw and effective changed fields, compact before/after physical device state, recent controller commands and baselines, remaining settling-window time, and current zone/Temporary Quick Thermostat state;
|
||||
- retained the v0.8.8 mobile modal layout fix.
|
||||
|
||||
Main changes:
|
||||
## Validation
|
||||
|
||||
- separated ordinary Quick Thermostat handback state from Temporary Quick Thermostat lifecycle;
|
||||
- made `activated_at` the sole authoritative marker for Temporary-session ownership;
|
||||
- added explicit Temporary lifecycle states and preserved/restored the underlying Quick/manual state;
|
||||
- delayed capture of `restore_zone_enabled` until actual takeover for delayed/at sessions;
|
||||
- manual/direct device takeover now outranks Temporary completion and pauses condition/runtime accounting;
|
||||
- active Temporary sessions freeze their active mode/target and defer house/group mode/preset changes until handback;
|
||||
- whole-house/group ON no longer sends a bare `power=true` when there is no valid effective Heat/Cool decision;
|
||||
- generic Settings cannot mutate house master/mode outside the House transition APIs;
|
||||
- configuration export/import strips ephemeral runtime ownership, safely stops detached devices, reconciles gates and repolls devices;
|
||||
- direct climate automations for thermostat-managed devices now modify durable zone state instead of competing one-shot frames;
|
||||
- schedule boundaries and time automations participate in the common next-deadline wakeup;
|
||||
- continuous temperature hold requires fresh observations and is reset across controller restarts/manual takeover;
|
||||
- disabling a device or zone now follows the safe shutdown/cleanup path;
|
||||
- active delayed/at Temporary sessions can be edited without accidentally rescheduling their historical start;
|
||||
- Temporary schedule-boundary deadlines are refreshed after schedule edits;
|
||||
- conflicting same-cycle automations are resolved deterministically, and blocked automations do not consume cooldown;
|
||||
- UI exposes scheduled/waiting-master/paused-manual/active Temporary states and uses the same `activated_at` ownership rule as the backend.
|
||||
- removed the legacy Temporary-session `generation=0` / `local_thermostat_power` activation fallback and the compatibility-only model field/test path.
|
||||
|
||||
## Validation executed in this environment
|
||||
|
||||
- JavaScript syntax checks for web application files;
|
||||
- JSON parsing for language and Home Assistant manifest files;
|
||||
- Python syntax compilation for Home Assistant integration files;
|
||||
- shell syntax checks for `scripts/*.sh`;
|
||||
- regenerated and verified `FILE_MANIFEST.sha256`;
|
||||
- final ZIP integrity check;
|
||||
- verified that no Temporary-session references to `generation`, `generation=0`, or the removed local-power activation fallback remain in `src/` or `web/`;
|
||||
- retained the compiler fix for Rust E0382 in `src/api.rs` by evaluating the `start_kind == "now"` predicate before moving `start_kind` into `TemporaryQuickThermostat`.
|
||||
|
||||
## Rust toolchain note
|
||||
|
||||
This environment does not contain `cargo`, `rustc`, `rustfmt` or `rust-analyzer`, so the Rust build and Rust test suite for v0.8.7 could not be executed here. The modified Rust files were checked for balanced delimiters and all removed model-field references were verified absent. Run `bash scripts/update.sh` on the target host to execute the full Rust test suite before service replacement.
|
||||
The Rust toolchain is not installed in this build environment, so `cargo test`/`cargo check` cannot be run here. Static source checks, JavaScript syntax checks, JSON parsing, shell syntax checks, manifest regeneration and ZIP integrity verification are performed before packaging. The target-host updater should run the full Rust test suite before replacing the service.
|
||||
|
||||
Reference in New Issue
Block a user