A grid charge (battery-mode cheap run, price trading, maintenance charge at one or two inverters) now counts the seconds since the last meter reading, so a late reading near a quarter's end cannot push the 15-minute average over the peak aim.
The peak guard row says "cutting the grid charge ... over" instead of "idle ... under" when it cuts a charge (EN + NL).
Flow: PR #214 merged into hotfix-0.19.2 at 8966867 (Opus review x2, CI job 2582 green, 85/85). Rig test TEST-23 PASS 4/4 (reports/SAFETY-125-test-report.md).
Merge to master is the owner's call; deploy needs a separate owner go.
Release hotfix 0.19.2 (SAFETY-125) to master.
- A grid charge (battery-mode cheap run, price trading, maintenance charge at one or two inverters) now counts the seconds since the last meter reading, so a late reading near a quarter's end cannot push the 15-minute average over the peak aim.
- The peak guard row says "cutting the grid charge ... over" instead of "idle ... under" when it cuts a charge (EN + NL).
Flow: PR #214 merged into hotfix-0.19.2 at 8966867 (Opus review x2, CI job 2582 green, 85/85). Rig test TEST-23 PASS 4/4 (reports/SAFETY-125-test-report.md).
Merge to master is the owner's call; deploy needs a separate owner go.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC
A meter reading late near a quarter's end left seconds the projection did
not count (SAFETY-99), and charge_headroom_w() read them as room: the cheap
run (and price trading, and the N=2 maintenance charge) went back to full
power in the quarter's last seconds and the quarter could land over a banked
month peak or the cap. peakguard.charge_room_w() counts those seconds at the
held reading for the charge only; the guard's floor is unchanged.
The guard row said "idle, heading for 5 814 W, under this month's 5 413 W
peak". Over the limit at the current rate the row and the month-peak line
now say so, and that the grid charge is cut back.
Version 0.19.2, CHANGELOG, DECISIONS. test_safety125.py new; the lag pins
in test_price_run_fixes.py and test_opt20.py and the AST pin in
test_arbitrage.py follow the change (see the pull request).
Co-Authored-By: Claude <noreply@anthropic.com>
- The over-the-limit rows ran over STYLE's 15 words (EN 16/19, NL 16/21)
and two Dutch Home sentences over 12 words; they were not in the samples,
so test_messages/test_ux46 never saw them. Now:
"Peak guard: grid charge limited, at this rate 5 814 W, over 5 413 W" /
"Piekbewaking: laden beperkt, aan dit tempo 5 814 W, boven 5 413 W",
"...idle, at this rate ..., over ..." / "...in rust, aan dit tempo ...",
NL Home "Laadt minder van het net om onder 5,4 kW te blijven." and
"Zou minder van het net laden om onder 5,4 kW te blijven."
The rows and the line are added to the samples. The under row is unchanged.
- CHANGELOG known issues and the DECISIONS note: at N=1 the maintenance
charge is not sized to the room, so SAFETY-99 still applies to it.
- DOCS: the peak guard row's new words.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner 2026-10-29: fix N=1 in this hotfix. _charge_headroom() no longer
returns early at one inverter, so the N=1 cheap-window maintenance charge
is held to charge_room_w() as at N=2; SAFETY-84's site-stop rule stays N>=2
only (at N=1 such a stop outranks the shaping anyway). The guard no longer
steps in and gives power at each quarter's end during that charge.
test_safety125.py: N=1 maintenance on 5 s and 10 s meters with late
readings, with and without a banked peak; the row in an N=2 maintenance
charge and in shadow mode; edge cases (blind past the hold, a start
mid-quarter, the summer-time change, the forecast in W, a 10 s meter, the
last second). test_safety84/87: three N=1 pins move. test_safety119: its
quarter-edge hand-back runs keep the old N=1 sizing as a fixture, plus a
check that with the new sizing nothing hands back. CHANGELOG, DECISIONS,
DOCS follow.
Co-Authored-By: Claude <noreply@anthropic.com>
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 hotfix 0.19.2 (SAFETY-125) to master.
Flow: PR #214 merged into hotfix-0.19.2 at
8966867(Opus review x2, CI job 2582 green, 85/85). Rig test TEST-23 PASS 4/4 (reports/SAFETY-125-test-report.md).Merge to master is the owner's call; deploy needs a separate owner go.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Bdqr7PiaHcBnzPituu2yTC