Release 0.20.1 (patch) on hotfix-0.20.1: config.yaml version 0.20.1 and the CHANGELOG section. Contents: OPT-36 (#229, 22d09f8). No option changes; existing installs need no option change. Not merged here; no tag, no deploy.
Release 0.20.1 (patch) on `hotfix-0.20.1`: `config.yaml` version 0.20.1 and the CHANGELOG section. Contents: OPT-36 (#229, 22d09f8). No option changes; existing installs need no option change. Not merged here; no tag, no deploy.
Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC
Patch bump: OPT-36 (Leftover solar counts Cheap hours only and Solar first batteries). No option changes.
Co-Authored-By: Claude <noreply@anthropic.com>
SAFETY-132: the 9.6 kW is the charge the add-on asked for in a test,
not a measured grid figure. SAFETY-133: the quarter also ends over the
3 500 W limit; the guard sees the load late (0.20.1 has no lateness check).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of #230 (REL-0.20.1), head reviewed ec4ba49; wording fix pushed as 01eba51.
Only config.yaml (0.20.0 -> 0.20.1) and CHANGELOG.md change in 22d09f8..ec4ba49. Against 01e88a2, config.yaml differs only in the version line; translations/ identical. PASS.
The 0.20.0 section equals master 01e88a2 byte for byte (diff empty); the OPT-36 "Not in a release yet" block is gone. PASS.
0.20.1 first line, text and contents row (22d09f8, #229, OPT-36) match the OPT-36 dev/test reports and the diff (en.json others_cover, the "rest ... comes from the grid" sentence, DOCS). 0.00 against 5.40 kWh is check 1 of the TEST-23 rig test, one run, worded "in a rig test" as in earlier releases. PASS.
Known issues: SAFETY-128 kept, "fix ... not in 0.20.1" true (fix is on release/1.0 only). SAFETY-133, SAFETY-132, OPT-37, UX-77 are To Do and match their cards (UX-77 "control keeps charging" is the card's investigation verdict). Left out SAFETY-129/130/131/134, UX-78, TEST-36 (the SAFETY-128 detector, not in 0.20.1), UX-76 (feature): right. No other card filed since 2026-11-01 is missing.
F1 (low, fixed): SAFETY-132 said "a peak test on 0.20.0 reached 9.6 kW", which reads as a grid figure. The 9.6 kW is the charge the add-on asked for in a test (SAFETY-128 dev report). Now: "In a test on 0.20.0 the add-on asked for a 9.6 kW charge."
F2 (nit, fixed): SAFETY-133: 3 530 W is also over the 3 500 W limit (card), now said; "sees the late readings too slowly" referred to the SAFETY-128 detector, which 0.20.1 lacks; now "sees the load too late".
SAFETY-132 kept: charge_room_w() sizes the cheap-window charge on 0.20.1 too (main.py:3387, 5062), so it is user-visible.
CI run 1524 on ec4ba49: success (attempt 1). test_version_gate and test_docs rc 0 locally (goodwe-addon-checks:1, --network none) on ec4ba49 and on the fix.
Merge after a green checks / unit (pull_request) on 01eba51.
**Review of #230 (REL-0.20.1), head reviewed ec4ba49; wording fix pushed as 01eba51.**
1. Only `config.yaml` (0.20.0 -> 0.20.1) and `CHANGELOG.md` change in 22d09f8..ec4ba49. Against 01e88a2, config.yaml differs only in the version line; translations/ identical. PASS.
2. The 0.20.0 section equals master 01e88a2 byte for byte (diff empty); the OPT-36 "Not in a release yet" block is gone. PASS.
3. 0.20.1 first line, text and contents row (22d09f8, #229, OPT-36) match the OPT-36 dev/test reports and the diff (en.json `others_cover`, the "rest ... comes from the grid" sentence, DOCS). 0.00 against 5.40 kWh is check 1 of the TEST-23 rig test, one run, worded "in a rig test" as in earlier releases. PASS.
4. Known issues: SAFETY-128 kept, "fix ... not in 0.20.1" true (fix is on release/1.0 only). SAFETY-133, SAFETY-132, OPT-37, UX-77 are To Do and match their cards (UX-77 "control keeps charging" is the card's investigation verdict). Left out SAFETY-129/130/131/134, UX-78, TEST-36 (the SAFETY-128 detector, not in 0.20.1), UX-76 (feature): right. No other card filed since 2026-11-01 is missing.
- **F1 (low, fixed):** SAFETY-132 said "a peak test on 0.20.0 reached 9.6 kW", which reads as a grid figure. The 9.6 kW is the charge the add-on asked for in a test (SAFETY-128 dev report). Now: "In a test on 0.20.0 the add-on asked for a 9.6 kW charge."
- **F2 (nit, fixed):** SAFETY-133: 3 530 W is also over the 3 500 W limit (card), now said; "sees the late readings too slowly" referred to the SAFETY-128 detector, which 0.20.1 lacks; now "sees the load too late".
- SAFETY-132 kept: charge_room_w() sizes the cheap-window charge on 0.20.1 too (main.py:3387, 5062), so it is user-visible.
5. CI run 1524 on ec4ba49: success (attempt 1). test_version_gate and test_docs rc 0 locally (goodwe-addon-checks:1, --network none) on ec4ba49 and on the fix.
Merge after a green `checks / unit (pull_request)` on 01eba51.
CI on 01eba51: checks / unit (pull_request) FAILED, run 1526 (job 2677, attempt 1, 10:05-10:27). Not merged.
The failure is not from this PR. It is a date time bomb in test_opt34.py:
1 of 94 files failed: test_opt34.py, check "(control: the same latch, still valid until tomorrow 07:15, does charge both: A 10.0, B 10.0 %)".
The stale_live scenario stores a latch with until = 2026-11-04 07:15 CET (at(4, 7, 15), fixed dates in Nov 2026). Controller.__init__ loads it with _load_latch(..., datetime.now(timezone.utc)) (app/main.py:1041-1043), the real clock. Since 2026-11-04 07:15 the real clock is past until, so the latch is dropped and nothing charges.
Proof: python test_opt34.py in goodwe-addon-checks:1 (--network none) fails the same check today on 01eba51and on ec4ba49, which passed in run 1524 on 2026-11-02. The only change in 01eba51 is two CHANGELOG lines.
The same test is on master 01e88a2 and release/1.0, so every checks / unit run on any branch fails from 2026-11-04 07:15 on. It came in with OPT-34 round 3 (bb57a85).
Fix (needs its own ticket): pass the scenario's own time to the latch load in the test (or make the dates relative to now). I did not change test code, rerun CI or merge.
**CI on 01eba51: `checks / unit (pull_request)` FAILED, run 1526 (job 2677, attempt 1, 10:05-10:27).** Not merged.
The failure is not from this PR. It is a date time bomb in `test_opt34.py`:
- 1 of 94 files failed: `test_opt34.py`, check "(control: the same latch, still valid until tomorrow 07:15, does charge both: A 10.0, B 10.0 %)".
- The `stale_live` scenario stores a latch with `until` = 2026-11-04 07:15 CET (`at(4, 7, 15)`, fixed dates in Nov 2026). `Controller.__init__` loads it with `_load_latch(..., datetime.now(timezone.utc))` (app/main.py:1041-1043), the real clock. Since 2026-11-04 07:15 the real clock is past `until`, so the latch is dropped and nothing charges.
- Proof: `python test_opt34.py` in `goodwe-addon-checks:1` (`--network none`) fails the same check today on 01eba51 **and on ec4ba49**, which passed in run 1524 on 2026-11-02. The only change in 01eba51 is two CHANGELOG lines.
- The same test is on master 01e88a2 and release/1.0, so every `checks / unit` run on any branch fails from 2026-11-04 07:15 on. It came in with OPT-34 round 3 (bb57a85).
- Fix (needs its own ticket): pass the scenario's own time to the latch load in the test (or make the dates relative to now). I did not change test code, rerun CI or merge.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Release 0.20.1 (patch) on
hotfix-0.20.1:config.yamlversion 0.20.1 and the CHANGELOG section. Contents: OPT-36 (#229,22d09f8). No option changes; existing installs need no option change. Not merged here; no tag, no deploy.Co-Authored-By: Claude noreply@anthropic.com
🤖 Generated with Claude Code
https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC
Review of #230 (REL-0.20.1), head reviewed ec4ba49; wording fix pushed as
01eba51.config.yaml(0.20.0 -> 0.20.1) andCHANGELOG.mdchange in 22d09f8..ec4ba49. Against01e88a2, config.yaml differs only in the version line; translations/ identical. PASS.01e88a2byte for byte (diff empty); the OPT-36 "Not in a release yet" block is gone. PASS.22d09f8, #229, OPT-36) match the OPT-36 dev/test reports and the diff (en.jsonothers_cover, the "rest ... comes from the grid" sentence, DOCS). 0.00 against 5.40 kWh is check 1 of the TEST-23 rig test, one run, worded "in a rig test" as in earlier releases. PASS.ec4ba49: success (attempt 1). test_version_gate and test_docs rc 0 locally (goodwe-addon-checks:1, --network none) onec4ba49and on the fix.Merge after a green
checks / unit (pull_request)on01eba51.CI on
01eba51:checks / unit (pull_request)FAILED, run 1526 (job 2677, attempt 1, 10:05-10:27). Not merged.The failure is not from this PR. It is a date time bomb in
test_opt34.py:test_opt34.py, check "(control: the same latch, still valid until tomorrow 07:15, does charge both: A 10.0, B 10.0 %)".stale_livescenario stores a latch withuntil= 2026-11-04 07:15 CET (at(4, 7, 15), fixed dates in Nov 2026).Controller.__init__loads it with_load_latch(..., datetime.now(timezone.utc))(app/main.py:1041-1043), the real clock. Since 2026-11-04 07:15 the real clock is pastuntil, so the latch is dropped and nothing charges.python test_opt34.pyingoodwe-addon-checks:1(--network none) fails the same check today on01eba51and onec4ba49, which passed in run 1524 on 2026-11-02. The only change in01eba51is two CHANGELOG lines.01e88a2and release/1.0, so everychecks / unitrun on any branch fails from 2026-11-04 07:15 on. It came in with OPT-34 round 3 (bb57a85).