This commit is contained in:
Mateusz Gruszczyński
2026-08-28 12:56:36 +02:00
parent 556a031358
commit 615b2836b7
12 changed files with 1279 additions and 331 deletions
+32 -21
View File
@@ -1,29 +1,40 @@
# GREE Controller v0.8.5 - build and validation report
# GREE Controller v0.8.6 - audit remediation report
## 0.8.5 Temporary temperature-condition activation fix
Source baseline: GREE Controller v0.8.5 audited on 2026-08-28.
Source baseline: v0.8.4.
## Implemented remediation
### Fix
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.
- Corrected Temporary Quick Thermostat temperature-condition activation detection.
- `activated_at` now correctly marks a session as active for `temperature_reached` and `temperature_stable` evaluation.
- Existing `local_thermostat_power == true` remains a compatibility/recovery marker for sessions persisted by earlier releases.
- Future delayed sessions still cannot evaluate or complete their temperature condition before `started_at`.
- The change directly addresses the v0.8.4 updater failures:
- `temporary_stable_condition_requires_continuous_hold_time`
- `temporary_stable_condition_resets_when_temperature_leaves_range`
Main changes:
### Validation executed in this environment
- separated ordinary Quick Thermostat handback state from Temporary Quick Thermostat lifecycle;
- made `activated_at` authoritative for fresh Temporary sessions, with legacy fallback only for generation 0 data;
- 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 fresh-session activation rule as the backend.
- JavaScript syntax checks for `web/app.js`, `web/theme-init.js`, `web/sw.js`
- JSON parsing for project JSON files
- Python syntax compilation for Python sources
- shell syntax checks for `scripts/*.sh`
- version consistency checks
- regenerated and verified `FILE_MANIFEST.sha256`
- final ZIP integrity check
## Validation executed in this environment
### Rust toolchain note
- 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.
This environment does not contain `cargo`, `rustc` or `rustfmt`, so Rust tests cannot be executed here. The supplied deployment log confirms v0.8.4 compiled and 46/48 tests passed; this hotfix changes the activation predicate responsible for the two failures. `scripts/update.sh` will run the full Rust test suite before replacing the service.
## Rust toolchain note
This environment does not contain `cargo`, `rustc`, `rustfmt` or `rust-analyzer`, so the Rust build and Rust test suite could not be executed here. The Rust changes were additionally checked for balanced delimiters and consistency of the modified model initializers, but a real `cargo test` remains required before production deployment.