Protocol version changelog
This page tracks changes to the Tensor Cloud battery optimization protocol. The version reflected here is info.version in the AsyncAPI specification and the schema_version field every EMS emits on every message.
Versioning follows semver-style: MAJOR.MINOR.PATCH.
- MAJOR - backwards-incompatible changes to topic structure, payload shape, or required fields that existing integrations cannot satisfy without code changes.
- MINOR - additive changes (new fields, new conditional validation, new behaviour) that strengthen guarantees but remain readable by clients on prior versions. Tensor Cloud remains backwards-compatible with messages emitted under older minor revisions.
- PATCH - documentation clarifications, example corrections, and other changes with no payload impact.
2.2.0 - 2026-05-28
Alerts, acknowledgements, and commands strengthened.
schema_versionis now required onAlertEventandAlertStatepayloads. Previously the field was defined but not in therequiredlist of either alert message. Tensor Cloud continues to accept alert payloads emitted under prior versions that omitschema_version; EMS implementations should add the field to alert payloads going forward.CommandResponse.errorsis now conditionally required by the schema: present (≥ 1 item) whenstatus: "error", absent whenstatus: "ok". Enforced via JSON Schemaif/then/else. Previously the rule was prose-only. No producer-side change required for EMS implementations that already followed the prose rule.TelemetryFeedback.codeandTelemetryFeedback.detailare now conditionally required by the schema: both present whenstatus: "error", both absent whenstatus: "ok". Enforced via JSON Schemaif/then/else. Affects the testing-only telemetry feedback channel; Tensor Cloud is the producer, EMS implementations only consume.BatteryFcrCommand.control.schedule[*].capacity_kwis now conditionally required by the schema: required whencontrol.actionisexecute(the default) and forbidden whencontrol.actioniscancel. Enforced via JSON Schemaif/then/else.BatteryPowerCommand.control.scheduleandBatteryFcrCommand.control.schedulenow declareminItems: 1. Empty schedules are rejected at the schema layer.- Embedded schema examples corrected:
CommandResponseexamples now include the requiredschema_version; FCR cancel examples usemessage_idvalues that match the documented^msg_[0-9a-f]{8}-…$pattern. - Top-level
additionalPropertiesis nowtrueon every message family (includingBatteryPowerCommandandBatteryFcrCommand). Previously commands were strict and other families lenient - the asymmetry is removed so forward-compatibility is uniform across the protocol.
2.1.0 - Previous baseline
Pre-changelog baseline. Includes the full set of telemetry, command, alert, and response channels documented in the integration guide and AsyncAPI spec.