This commit is contained in:
Mateusz Gruszczyński
2026-08-25 18:54:35 +02:00
parent a8b80bdba9
commit 3ee93b7225
18 changed files with 560 additions and 93 deletions
+35 -1
View File
@@ -1,4 +1,4 @@
# GREE Controller v0.6.9 - build and validation report
# GREE Controller v0.7.0 - build and validation report
## Scope
@@ -191,3 +191,37 @@ Validation performed in this packaging environment:
- Added explicit climate-group cards to What happens next, combining member demand and upcoming member-zone events.
- Zone plan cards identify their climate group membership, and automation plan rows preserve group targets.
- Advanced the PWA cache key to `gree-controller-v069-dashboard-fit`.
## 0.7.0 UI cleanup and scheduler/automation integrity audit
- Removed directional arrow glyphs from Swing controls on dashboard and device cards.
- Removed the divider above the unit feature block and tightened desktop quick-mode/fan controls so all buttons fit without horizontal scrolling.
- Allowed the detailed zone quick-change hint to wrap naturally on desktop.
- Added an explicit Mode policy hint: keep Follow house mode when the zone should inherit the global GREE Controller mode; fixed Cooling/Heating are intentional overrides.
- Fixed the Always-comfort schedule template to represent a true 24-hour window without a one-minute gap.
- Added overlap detection for enabled schedules, including overnight windows, and deterministic handling for legacy overlapping rows.
- Fixed the Workday template Sunday-to-Monday handoff so Sunday Sleep ends at 06:30 before Monday Morning starts.
- Manual zone/profile overrides now expire at the actual next weekly schedule transition; if none exists, they remain active until explicitly cleared instead of expiring after an arbitrary fallback timeout.
- Editing/deleting/applying schedule templates refreshes the active manual-override boundary.
- Time automations are limited to one execution per local minute even with the minimum 30-second cooldown; failed actions now also observe cooldown to avoid retry/log storms.
- Temperature automations ignore stale readings from disabled/offline trigger devices.
- Direct-device automations cannot wake a unit blocked by a disabled climate group.
- Group power-on respects other disabled overlapping groups; group power-off remains authoritative.
- Automation creation/import validates target/trigger references, empty actions and unsupported group-action fields.
- Device/zone deletion now protects automation/group references and removes orphaned schedules. A physical device can be assigned to only one thermostat zone.
- Control-plan event timestamps are normalized to minute boundaries; time-event preview covers DST-length local days.
- Added Rust unit-test cases for overnight/full-day schedules, overlap detection, weekly boundary lookup, Workday weekend handoff and one-fire-per-minute time automations.
Rust compilation/tests still require a host with the Rust toolchain (`cargo`/`rustc`); this build environment does not provide it. Static frontend, JSON, Python/Home Assistant, archive and manifest validation are performed below.
Validation for the 0.7.0 package:
- `node --check` passed for `web/app.js` and `web/sw.js`.
- PL/EN JSON and Home Assistant manifest parsed successfully; PL/EN translation key sets are identical (578 keys each).
- Home Assistant Python modules passed `python3 -m py_compile`.
- `web/index.html` parsed with Python's HTML parser; CSS braces are balanced.
- No Swing arrow glyph remains in web controls, the device feature divider rule is removed, and the detailed-zone quick hint has an explicit wrapping rule.
- All built-in schedule templates were exercised against the weekly minute-mask model: no overlaps; Family/Child/Bedroom/Always cover the full week, and Workday's intentional uncovered period falls back to the normal Comfort profile.
- SQLite `INIT_SCHEMA` and device-delete orphan-schedule cleanup SQL were executed successfully against temporary in-memory databases.
- Rust source delimiter/static checks passed. Rust compile/test execution is unavailable here because no Rust toolchain is installed.