Repository navigation
docs(debug-journal): fold the 2026-10-19..20 review slice (15 candidates); mark #5656/#5657 and Hanchu #5684 on main - #5700
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated journal flush — the daily
/journal-updaterun. It readstools/debug-journal.mdend to end, verifies each queued candidate against current main before folding, and never merges its own PR. 15 candidates processed of 39 queued; 24 left queued. Quality gate: all pre-commit hooks pass (the gate reached the test suite after the&&), and the quick suite passed the modules it reached before the local 10-minute command cap cut it off mid-run (the two quick-suite modules the journal documents as failing 00:00–01:00 local on unmodified main sit in the never-reached tail; CI in UTC is outside that window). 4 new words added to the cspell dictionary (indra,luxpython,luxpowertek,zoneinfo).Per-candidate outcome
Folded in
min(rate, inverter_limit × inverter_loss + pv_dc)is exact for hybrids with PV while the clamp binds (the clamp'smin(battery_draw + over_limit × inverter_loss, 0)correction cancels the/inverter_lossdivider inget_total_inverted()), so the row's old "cannot be a bare min() — exact only for a zero-PV window" caution was wrong; the remaining inexact case is thebattery_rate_max_charge_dc > battery_rate_max_chargeboost. PR fix(output): cap the plan tooltip charge rate at the inverter limit #5643 is still open, so the row keeps the mechanism marked live on main. Verified the clamp block (prediction.py) andget_charge_rate_kw()(output.py) on main.docs/apps-yaml.mddocuments each setting twice (a**key** -bullet in the CONFIG reference and a### <Display Name>detail section further down that cross-page links resolve to), so a docs fix that updates only the bullet leaves the linked-to section stale and a key grep misses it (search the display name too). Verified live on main: theinverter_reserve_maxbullet says "(default is 100)" while its linked-to### Inverter reserve maximumsection still says "the default is 98".comments: []instead of re-anchoring duplicates.octopus_url::day_night_ratesExpected 16 rate entries (8 days), got 15failure was a product bug (pytz re-normalisation rewound the per-day anchor across the autumn clock change), plus the pytz technique note (a localised pytz tzinfo still carries the zone's full transition table — don't "simplify" toreplace(tzinfo=…)). Verified_localise_wall_clock()and the reworked docstring on main. Dropped: the candidate's stale-docstring note (00:30–07:30 vs 00:30–05:30) — the merge already reworked that docstring.grid_powernegative on import,battery_powerpositive on discharge, so a charge-positive EV sensor takesbattery_power_invert: True); unknowninverter_typeneeds no code change (GE-copy synthesis +inverter:overlay);battery_min_socreaches the plan only via the reserve chain; the freeze-export fallback assumesdischarge_stop_serviceis a neutral hold (the active-mode risk on mode-select devices). PR Add Indra V2H / V2G inverter template and docs #5648 itself is open, so the bullet stays class-level.nominal_capacityonpredbat_soc_max_calculated; "tail-only charging" is correct in itself on a flat tariff — check the capacity model first), and the replay crash into the empty-step-arrays row (a dump with the step arrays cleared raisesKeyError: 0in the replay before any plan; check the dump'spv_forecast_minute_step:keys for{}first —charge_window_best/rate_import/args:remain present and are usually enough).Filled N gaps … totalling XkWhsums every in-window gap minute acrossmax_days_previousdays — not today's inflation), and the simulation result (first-day double-count material-but-settling; the unbounded runaway was not reproduced on synthetic data).strptime_aware()) was already on main and in the journal; folded part 2 (the AST guardoffset_strptime_calls()silently passes anast.Attributeformat likeconst.TIME_FORMAT— added to the Python 3.15 trap bullet); dropped part 3 (the quick-suite first-failure abort masking later tests) as already covered by the Test-order pollution section, and its concrete octopus_url instance is moot since fix(octopus): keep the day/night rate schedule whole across a clock change #5655 fixed the day/night schedule.protocol=, so runtime rides MQTT 3.1.1 and can never carry a reason code;publish()does wait for the PUBACK, so the log line is blind only to the reason). Dropped the candidate's probe-internals caveat — the merged fix(sigenergy): REST power from energyFlow, device-list discovery, MQTT --command-test and --mqtt-scan #5654 already warns when paho'son_publishcannot be hooked.dynamic_load_car_confirmed_periodsrecorded the car charging — recorded only fromDYNAMIC_LOAD_CAR_CONFIRM_MINUTES(2) minutes into the half hour, so a blip starting on the boundary is never confirmed; report shape "a 14:00 one-minute dispatch shows the day rate; a :13 one works". Verifieddispatch_too_short()and theminute % 30 >= 2gate on main, plus the!!setserialisation note.Hold charging as SoC … is above target SoCimmediately preceding every such write; re-asserted every 5-min cycle), with the two compounding effects (reset_inverter: trueon both config items; unattributed external reserve writes) and the plan-panel display gap (mirror of GH#5400). Verified the execute.py hold branch and thereset_inverterflags on main.lux_*vs wills-b cloudlxp_*), every target-SoC write floored at the reserve (int(max(soc, reserve_percent))— verified inadjust_battery_target()), per-register device minimums make a well-configured setup still fail (reporter's portal screenshot), fix umbrella GH#4831, workaroundset_reserve_min≥ the device's smallest register minimum.removed the dispatch ratelines silent exactly when charging begins), the yaml diagnostic (rate_import_no_iocheap +io_adjustedmarked with no backing dispatch), the today-cost caveat, and the billing-truth constraint under the window billing rule.Dropped outright: none; two partial drops are named above (5646's docstring note and 5653's part 3, each with its reason). Two candidates (5644, 5647) relate to PRs whose state changed after the candidates were written: #5644 closed as duplicate of #5651, #5647 still open.
Existing entries corrected (re-check against what merged since)
io_confirmed_credit_update(), a score-only bird-in-hand credit for the dispatch-made-cheap run in force (0.1p/kWh current half hour, /(1+n) after, offmetric_keep, cost untouched), so charging early in a confirmed run now scores slightly better; the row now says that, and notes it is smaller thanmetric_min_improvement_plan.predbat.py:1329-1334line citation with theFree memorycomment anchor (the cite had drifted twice).octopus_urlCI failure fixed in PR fix(octopus): keep the day/night rate schedule whole across a clock change #5655 (d3c2f72); the fix mechanism and pytz technique recorded;#5657and#5663added alongside.Filled N gapsreading note.Verification notes
a1ff5ff3): the tooltip clamp block +get_charge_rate_kw(),adjust_battery_target()'s reserve clamp, the execute.py hold-reserve write andreset_inverterflags,dispatch_too_short()+ the 2-minute confirm gate,fill_load_from_history()post-fix(fetch): only backfill load_today from load_energy_h0 before its history starts (#5652) #5656, the production sigenergy MQTT paths passing noprotocol=, theFree memoryblock, the day/night schedule code + docstring post-fix(octopus): keep the day/night rate schedule whole across a clock change #5655, and the apps-yaml.md duplicate-section structure../run_pre_commit's hook set passed (pre_commit run --all-filesexited 0 — the gate reached the suite after the&&); the quick suite passed the modules it reached in the first ~10 minutes (secrets, export_encoding, …) before the local command cap cut the run; the full quick suite exceeds the cap on this runner.