4.11.0 (2026-07-27)
๐ Features
- meter-values: coherent MeterValues generator (issue #40) (#1935) (b907992)
- meter-values: evse-level MeterValues template fallback in coherent path (issue #1936 g) (#1944) (a0cdcfc)
- meter-values: honor RegisterValuesWithoutPhases in coherent path (issue #1936 k) (#1942) (2cbd92d)
- ocpp16: wire signed meter values into trigger + broadcast paths (issue #1936 d) (#1945) (4b421f2)
- ui-server: add opt-in HSTS response header (#1980) (#2039) (74fae39)
- worker: terminate a deleted station's worker once it hosts zero elements (#2027) (#2038) (75897eb)
๐ Bug Fixes
- atg: invalidate configurationValidationResult on ChargingStationEvents.updated (#1977) (56479e4)
- charging-station: cancel a pending reset when the station is deleted (#2027) (#2031) (2b48cf8)
- charging-station: re-dial after a server-initiated connection close (#2021) (6f7bcb6)
- charging-station: retain creation options so a reset keeps station identity (#2019) (723aab3)
- deps: update all non-major dependencies (#1933) (f50a68e)
- deps: update all non-major dependencies (#1996) (9b1b8e8)
- deps: update all non-major dependencies (#2007) (1703e73)
- deps: update all non-major dependencies (#2030) (1945ea3)
- deps: update all non-major dependencies (#2034) (ee3db96)
- deps: update all non-major dependencies (#2042) (f08aae5)
- deps: update all non-major dependencies (#2045) (250e359)
- meter-values: physics refinements - 3-phase-only L-L voltage guard + energyRegisterWh docstring (issue #1936 h) (#1941) (c471bd9)
- ocpp20: trigger meterValues path emits MeterValuesRequest per F06.FR.06 (issue #1936 j) (#1943) (66890b0)
- ocpp: cancel deferred OCPP 1.6 firmware setTimeout on stop() (#1984) (2e69125), closes #1972
- ocpp: cross-check OCPP 1.6 lifecycle flags in trigger, re-entry, and simulation entry (#1987) (0ed90b1), closes #1973
- ocpp: drive FirmwareStatusNotification trigger from last-sent notification (L01.FR.26) (#1981) (e406ab2), closes #1979
- ocpp: from-zero audit โ Critical + High spec conformance and safety fixes (#1961) (6da3e6f)
- ocpp: guard OCPP 1.6 UpdateFirmware deferred-timer schedule against sealed state writes (#1994) (247fef2)
- ocpp: guard post-stop() handler dispatch against WeakMap resurrection (#1992) (4fce19a)
- ocpp: implement OCPP 1.6 GetDiagnostics supersession via AbortController (#1991) (4d1d2d8)
- ocpp: reject charging profiles by EVSE existence and isolate non-persistent station configuration (#2022, #2024) (#2025) (aba5375)
- ocpp: reset stationInfo.firmwareStatus on abort/exception in simulateFirmwareUpdateLifecycle (#1976) (4f959e9), closes #1969
- ocpp: support TriggerMessage(TransactionEvent) per F06.FR.07 (#2013) (22dcb31), closes #2012
- ui-server: dedup duplicate station identity on add (#2026) (#2032) (44c2a0a)
- ui-server: defer HTTP broadcast responses until worker replies aggregate (#2028) (#2037) (d8fb33b)
- ui-server: make UI broadcast-channel commands complete reliably (#2018) (#2020) (6119452)
- ui-server: reconcile evses wire type so /metrics works on OCPP 2.0.x (#2048) (afdf433)
- ui-server: reject reused in-flight WebSocket request ids (#2029) (#2033) (de0e86f)
- utils: clamp computeExponentialBackOffDelay output to setTimeout-safe range (#1951) (a91880a)
โจ Polish
- audit backlog cleanup โ JSDoc gaps, physics warning, ATG robustness, comment sweep (#1962) (040ddb3)
- audit-driven cleanup โ OCPP conformance fixes, physics, harmonization (#1960) (f8d8e03)
- audit-driven cleanup (OCPP 2.0 spec conformance + 5 low-risk refactors) (#1959) (22cb25f)
- charging-station,meter-values: close #1936 (M-08 + f-2..f-5 + M-09) (#1949) (9c8261e)
- charging-station: extract reservation helpers from Helpers.ts (issue #1936 f Phase 1) (#1946) (f03e7f3)
- close barrel gaps for ui-server, broadcast-channel, DEFAULT_PERSIST_STATE (#1952) (a7a3ee2)
- code-quality cleanup โ utils usage, logic consolidation, export hygiene (#2036) (2bee489)
- complete barrel-gap scope โ extract host-parsing utilities and expose AbstractUIServer (daad8a9)
- complete barrel-gap scope โ extract host-parsing utilities and expose AbstractUIServer (#1954) (daad8a9)
- convention alignment โ helpers, constants, imports, tests (#1950) (0b0352f)
- convention alignment round 2 โ canonical defaults, helpers, dead exports, tests (#1956) (e0a50c5)
- meter-values: extract CoherentMeterValuesManager, shrink ICoherentContext, split OCPP16 begin helper (issue #1936 items a, b, e) (#1937) (1986b39)
- meter-values: rename Prng.ts to PRNG.ts (issue #1936 c) (#1940) (11cc0a3)
- meter-values: split CoherentMeterValuesGenerator into three modules (issue #1936 item i) (#1938) (53b747b)
- migrate external deep imports to ui-server and broadcast-channel barrels (#1953) (b4b5a5e)
- ocpp20: rewrite H9/H10/H11 + C10/C12 audit markers as descriptive comments (issue #1936 l) (#1939) (a68ca80)
- ocpp: extract per-station state plumbing into shared OCPPIncomingRequestService base (#1983) (0fff8b2)
- ocpp: remove as-unknown-as double-casts from request/response dispatch (#2003) (4dd00ce), closes #1968
- ocpp: use iterateConnectors() in OCPP 1.6 incoming request service (#2015) (27093f1), closes #2014
- utils: swap getRandomFloat(Rounded) params to (min, max) for consistency (#1998) (bc003cc), closes #1967