diff --git a/.changeset/heartbeat-timeout-scenario.md b/.changeset/heartbeat-timeout-scenario.md deleted file mode 100644 index f71f4f7..0000000 --- a/.changeset/heartbeat-timeout-scenario.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@ocpp-debugkit/toolkit': patch ---- - -Add `heartbeat-timeout` scenario covering the `TIMEOUT_NO_HEARTBEAT` detection rule. The synthetic trace boots a station with `interval=300`, then sends a `StatusNotification` past the 2× interval threshold (`06:12:00.000Z`) with no `Heartbeat` anywhere in the trace. diff --git a/CURRENT_STATE.md b/CURRENT_STATE.md index ac047c6..c67454e 100644 --- a/CURRENT_STATE.md +++ b/CURRENT_STATE.md @@ -24,6 +24,7 @@ step). Do not edit between the markers by hand. Full history lives in sections further down. +- `0.4.6` (2026-08-08): Add `heartbeat-timeout` scenario covering the `TIMEOUT_NO_HEARTBEAT` detection rule. The synthetic trace boots a station with `interval=300`, then sends a `StatusNotification` past the 2× interval threshold (`06:12:00.000Z`) with no `Heartbeat` anywhere in the trace. - `0.4.5` (2026-07-30): Report every refusing `AuthorizationStatus` in `FAILED_AUTHORIZATION`, not just `Invalid` (#156). The OCPP 1.6 enumeration (edition 2, section 7.2) has five values and only `Accepted` permits charging, so `Blocked`, `Expired` and `ConcurrentTx` end a driver's session exactly as `Invalid` does. The rule fired on `Invalid` alone, which meant a blocked or expired token produced a clean report, and silence from a detector reads as "this is not the problem". All four refusals now report under the existing code, with the status named in the description, and the suggested steps mention the `ConcurrentTx` case. Adds a `refused-authorization` scenario covering the three newly reported statuses, bringing the corpus to 18.; Match `FIRMWARE_UPDATE_FAILURE` to the OCPP 1.6 `FirmwareStatus` enumeration (#154, edition 2 section 7.25). The rule matched `DownloadPaused`, `InstallFailed` and `InstallRebootingFailed`, none of which are 1.6 status values, and did not match `InstallationFailed`, which is one of the two failure values the enumeration defines. A conformant station reporting a failed installation, the more consequential of the two firmware outcomes, went undetected. The rule now matches exactly `DownloadFailed` and `InstallationFailed`, and the `firmware-update-failure` scenario reports `InstallationFailed` instead of the non-spec `InstallFailed` it used before.; Transcribe the `STATUS_TRANSITION_VIOLATION` matrix from the OCPP 1.6 status transition table (#155, edition 2 section 4.9). The matrix disagreed with the table in both directions: it flagged 22 transitions the table permits and permitted 2 it does not list. The false positives were concentrated in the recovery rows, where the table allows a connector to return from `Faulted` to any pre-fault state and from `Unavailable` straight into an operative state, so any station that faulted mid-session and resumed charging, or that took a scheduled availability change during a session (`Charging -> Unavailable` and its siblings), produced a spurious warning. `Preparing -> Unavailable` and `Finishing -> Reserved` are absent from the table and are now flagged. The rule's matrix is now the table cell by cell, with the spec's own cell labels alongside it, and a test transcribes the table independently so the two have to agree. - `0.4.4` (2026-07-30): feat(scenarios): add firmware-update-failure scenario @@ -501,7 +502,7 @@ it to 21, at which point all 16 detection rules are covered. | Package | Status | Version | |---------|--------|---------| -| `@ocpp-debugkit/toolkit` | published | 0.4.5 | +| `@ocpp-debugkit/toolkit` | published | 0.4.6 | | `@ocpp-debugkit/core` | deprecated | 0.1.1 | | `@ocpp-debugkit/scenarios` | deprecated | 0.1.1 | | `@ocpp-debugkit/reporter` | deprecated | 0.1.1 | diff --git a/packages/toolkit/CHANGELOG.md b/packages/toolkit/CHANGELOG.md index 6a153e8..3e8be4e 100644 --- a/packages/toolkit/CHANGELOG.md +++ b/packages/toolkit/CHANGELOG.md @@ -1,5 +1,11 @@ # @ocpp-debugkit/toolkit +## 0.4.6 + +### Patch Changes + +- dc2a77c: Add `heartbeat-timeout` scenario covering the `TIMEOUT_NO_HEARTBEAT` detection rule. The synthetic trace boots a station with `interval=300`, then sends a `StatusNotification` past the 2× interval threshold (`06:12:00.000Z`) with no `Heartbeat` anywhere in the trace. + ## 0.4.5 ### Patch Changes diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 92dc1c9..c62b46d 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@ocpp-debugkit/toolkit", - "version": "0.4.5", + "version": "0.4.6", "description": "Open-source DevTools for debugging OCPP charging sessions — parser, normalizer, timeline, failure detection, scenarios, replay, reports, CLI, and React components.", "license": "Apache-2.0", "type": "module",