Skip to content

docs(debug-journal): fold in the 2026-09-30 queue slice (2 candidates); mark GH#4940 fixed by PR #5308, GH#5294 by PR #5295, add the PR #5297 write-retry policy - #5312

Merged
springfall2008 merged 1 commit into
mainfrom
bot/debug-journal-2026-09-30
Sep 30, 2026
Merged

springfall2008 merged 1 commit into
mainfrom
bot/debug-journal-2026-09-30

Conversation

@springfall2008

Copy link
Copy Markdown
Owner

Automated PR prepared by the triage bot's /journal-update flow; a human merge is the review gate on this file.

Queue slice: 2 candidates taken (limit 15), 0 left queued — the queue held only today's pair. Every claim was re-verified against origin/main at e652b2b1 (v9.3.3) before folding, and the journal was re-checked against what merged since the 2026-09-29 fold (PR #5296): PRs #5295, #5297 and #5308 overtake three existing entries, all corrected below.

Candidates processed

Folded in — GH#5300, Tesla reserve reset races a service hook on the reserve register (journal-queue/5300-tesla-reserve-race.md) → appended to the HA write/verify row. Verified on main: the reset block (if self.set_reserve_enable and resetReserve: inverter.adjust_reserve(0)) has no isCharging guard — one sharpening of the candidate: resetReserve starts True only when set_charge_window or set_export_window, not unconditionally; the clear branches are the freeze / hold-charging / car / iBoost holds; adjust_reserve() floors at reserve_percent and writes through write_and_poll_value(); the shipped-template immunity was confirmed in templates/tesla_powerwall.yaml (has_reserve_soc: False, the Note: Inverter does not support reserve disable in fetch_inverter_data()) and the dummy-arg path (create_missing_arg/create_entity); the "Current Reserve is X%" / "Wrote X to reserve" discriminator kept as the real-vs-dummy wiring check, plus the dump-config tells (expert-mode-hidden switch reads value: null yet resolves True; unknown args: keys ⇒ hand-built config). The candidate's line cites had drifted on main (inverter.py:3237 / :2006-2011 / :717-719) and were replaced with symbols.

Folded in — GH#5303, reset_inverter() writes a 100% target on target-SoC-only inverters (journal-queue/5303-reset-inverter-100-target.md) → new row in the symptom table. Verified on main: the 100% "safe mode" write with no inv_has_charge_enable_time consult in reset_inverter()/adjust_battery_target(); the 13 "reset_inverter": True CONFIG items (re-counted: 13, plus 2 reset_inverter_force items for mode select / set_read_only), None→value at startup counting as a change (userinterface.py); mode gating in fetch.py, where the startup reset-100 fires in the charge-controlling modes and the SoC-only modes only via the forced paths; the same-cycle corrections (plan target near a window, and the steady-state 0 write for has_charge_enable_time: False inverters outside a window); standing cases (entering Read-Only via the force gate, or Predbat stopping right after); the other 100% writes (calibration branch; self_test() under the INVERTER_TEST dev constant); the identically named reset_inverter(my_predbat) fixture helper (tests/test_infra.py:629); and the templates/victron.yaml 404 (re-confirmed 404 against the raw URL; no such file in templates/). Drifted line cites in the candidate were replaced with symbols (e.g. const.py:103→110, inverter.py:1884→1897, inverter.py:1884-1885→1897-1898).

Existing entries corrected (with the merge that invalidated each)

  • Solis row — GH#4940 marked fixed by PR fix(solis): plan charge and discharge at the inverter's own separate limits #5308 (merged 2026-09-29, v9.3.3). The entry described the asymmetric binding (battery_rate_max → max_charge_power, max_discharge_power bound to nothing) as "still live". The merge publishes a battery_rate_max sensor holding the larger of the two per-direction limits and binds inverter_limit_charge/inverter_limit_discharge with overwrite=False; mechanism kept for pre-fix(solis): plan charge and discharge at the inverter's own separate limits #5308 logs. The companion GH#5187 sentence in the same row and the "charge or discharge rate pinned far below the hardware's" symptom row were updated with it.
  • GE Cloud row — GH#5294 marked fixed by PR fix(gecloud): re-read the device list hourly so added or removed hardware is picked up (#5294) #5295 (merged 2026-09-29). The entry's "a restart is currently the only mechanism" for added/removed-device discovery no longer holds: refresh_devices() re-reads the device list hourly (DEVICE_REFRESH_SECONDS) and select_poll_devices()/apply_devices() rebuild what is polled and drop removed devices' stores. The refresh_discovery()-is-not-device-re-discovery naming trap and the 5-day last_updated skip survive the fix and stay as caveats.
  • HA write/verify row — PR fix(gateway): stop re-sending hub writes that never verify #5297 (merged 2026-09-29) made the write-retry ladder per type. The verify-window arithmetic entry now also records INVERTER_DEF[type]["write_max_retry"]/["write_backoff"] (only GWMQTT deviates: 3 attempts, 10s apart, and a 2-failures → one write per 5 min degraded state until it verifies; all other types unchanged), and the "hundreds of identical didn't complete" symptom row gained the GWMQTT-only exception to its "indefinitely" reading.

Dropped

None — both candidates survived verification, and neither duplicated coverage (the #5300 entry is placed beside its #5094/#4165/#4641 sibling but the reserve race itself was not in the journal; #5303 is a new symptom mapping).

Quality gate

All 14 pre-commit hooks pass on the change (cspell and markdownlint-fix included; no dictionary additions needed). The run_all --quick half of ./run_pre_commit cannot pass locally during the 00:00–01:00 BST hour: test_teslemetry_local_weekday_follows_the_base_clock asserts the host's datetime.now().weekday() against a UTC-based fallback — the crash documented in this journal's 2026-09-22 note. Reproduced bare at 00:12 BST (AssertionError at tests/test_teslemetry.py:2789) and confirmed unrelated to this docs-only change: under TZ=UTC ./run_all --quick the whole quick suite is green — "All tests passed (4 slow tests skipped, total time: 73.65s)".

🤖 Generated with Claude Code

…); mark GH#4940 fixed by PR #5308, GH#5294 by PR #5295, add the PR #5297 write-retry policy

Co-Authored-By: Claude Code <noreply@anthropic.com>
@springfall2008
springfall2008 marked this pull request as ready for review September 30, 2026 06:54
@springfall2008
springfall2008 merged commit 4335660 into main Sep 30, 2026
2 checks passed
@springfall2008
springfall2008 deleted the bot/debug-journal-2026-09-30 branch September 30, 2026 06:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant