Skip to content

Latest commit

 

History

History
139 lines (111 loc) · 6.88 KB

File metadata and controls

139 lines (111 loc) · 6.88 KB

Changelog

All notable changes to OCPP DebugKit Studio are documented here.

The format follows Keep a Changelog. This project is pre-1.0: while Zig, the Native SDK, and the toolkit conformance reference are all pre-1.0, minor (0.x) releases may include breaking changes.

0.5.5 - 2026-07-30

Changed

  • The conformance contract is now contract-v2: 18 shared scenarios, up from 15, regenerated against toolkit 0.4.5. studio ci and the build-time harness gate on 18/18. The three added scenarios (firmware-update-success, firmware-update-failure, refused-authorization) cover the firmware statuses and the non-Invalid authorization refusals the frozen corpus never reached, which is how the rule defects fixed in 0.5.4 stayed green at 15/15. contract-v2 is a strict superset of v1: the 15 existing fixtures and goldens are unchanged, byte for byte. See ADR-0013.

0.5.4 - 2026-07-30

Fixed

  • Three detection rules now follow the OCPP 1.6 specification where they previously diverged from it, matching the toolkit fixes released as toolkit 0.4.5 (toolkit#154, #155, #156):

    • FIRMWARE_UPDATE_FAILURE matches exactly the two failure values of the FirmwareStatus enumeration, DownloadFailed and InstallationFailed (OCPP 1.6 edition 2, section 7.25). It previously matched DownloadPaused, InstallFailed and InstallRebootingFailed, none of them 1.6 values, and missed InstallationFailed, so a station reporting a failed install was not flagged.
    • STATUS_TRANSITION_VIOLATION uses the section 4.9 transition table as written, 53 permitted transitions. The old matrix flagged 22 transitions the table permits, most of them recoveries from Faulted and Unavailable back into an operative state, and permitted 2 the table omits (Preparing -> Unavailable, Finishing -> Reserved).
    • FAILED_AUTHORIZATION reports every refusing AuthorizationStatus (section 7.2): Blocked, Expired and ConcurrentTx alongside Invalid, with the status named in the description.

    The 15 conformance goldens are unchanged, so contract-v1 still holds. Equivalence with the toolkit was also checked directly: both engines return identical failure-code sets on 97 probe traces covering every firmware and authorization status and all 81 ordered connector-status pairs.

0.5.3 - 2026-07-22

Fixed

  • METER_VALUE_ANOMALY no longer false-positives on charge points that report more than one measurand per sample, or on multi-connector stations. Meter readings are now bucketed by (connectorId, measurand, phase, unit, location), and the monotonic and non-negative checks apply only to cumulative Energy.*.Register measurands (OCPP 1.6 section 7.28). Reported by shiv3.
  • STATUS_TRANSITION_VIOLATION no longer false-positives on multi-connector stations. Connector status is tracked per connector (connectorId 0, the whole charge point, is its own series), so a notification from one connector is not compared against another's.

0.5.2 — 2026-07-13

Added

  • macOS one-line installercurl -fsSL https://raw.githubusercontent.com/ocpp-debugkit/studio/main/scripts/install-macos.sh | bash downloads the latest release, verifies its SHA-256, installs the app to Applications, and opens it. Releases now publish a SHA256SUMS checksums asset.

Changed

  • The README macOS install is now the one-liner; the manual download / quarantine instructions were removed.

0.5.1 — 2026-07-12

Changed

  • macOS — the packaged app bundle is now named OCPP DebugKit Studio.app (previously studio.app), so its on-disk name matches its display name; the CLI binary is unchanged (studio). The install docs now cover clearing the Gatekeeper quarantine on the ad-hoc build.

0.5.0 — 2026-07-12

Studio's first packaged, signed public release, assembled across milestones S0–S5. Highlights:

Added

  • Engine — a pure-Zig, headless OCPP 1.6J engine: canonical event / session / failure model, a trace parser (JSON object, JSONL, and bare-array formats with untrusted-input limits), timestamp + direction normalization, and transactionId session correlation.
  • Detection — the full 16-rule OCPP 1.6J failure taxonomy, conformant with the TypeScript toolkit and locked to the contract-v1 goldens (15/15 scenarios).
  • Inspector — a native window with a virtualized event timeline (smooth past 500k events), a message inspector (raw OCPP-J array, normalized fields, a bounded payload disclosure tree), a session-correlation panel, a ranked failure drawer with remediation steps, and search / filter facets. Traces open from command-line paths, with a built-in sample.
  • Analysis — Markdown and self-contained HTML reports, anonymize-on-export (redacts idTag / serials / stationId / identifier, resequences transaction ids, and scrubs email / phone / IPv4 patterns), semantic trace diff, and a deterministic step-through replay engine with a manual scrub transport.
  • Live capture — a live WebSocket MITM proxy between a charge point and its CSMS (hand-rolled RFC 6455 subset): frames are relayed verbatim, decoded in flight into canonical events, run through detection as they stream, and recorded to the canonical trace format. Surfaced both in a live inspector timeline and from the CLI; OS notifications fire on critical live failures.
  • Headless CLI — the same binary is a scriptable CLI: inspect, report (markdown / html), diff (text / json), anonymize, capture, ci, and scenario.
  • Packaging — macOS (.dmg, ad-hoc signed) and Linux (.tar.gz) packages via native package, published by a tag-triggered release workflow.
  • Conformance contract — the Studio ⇄ toolkit contract frozen and documented as contract-v1 (CONTRACT.md), CI-gated on every change.

Known limitations

  • macOS builds are ad-hoc signed, not notarized (first launch needs right-click → Open). Notarization is planned post-0.5.
  • Failure detection is capped at 50k events (several rules are O(n²)); larger traces stay fully inspectable with detection skipped. The O(n) rewrite is tracked upstream.
  • TLS (wss://) live capture, a menu-bar monitor, and interactive open (dialog / drag-drop) are planned for later releases.