Skip to content

Releases: devicechain-io/devicechain

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 18:08
7d385e6

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim.
See Pre-1.0 stability.

What's in v0.16.0

Important

This release contains breaking changes. They are described in the first
bullets below and in full in the upgrade notes.

  • A plain helm upgrade from v0.15.x. One migration runs itself as command-delivery starts, adding a column with a default and backfilling existing rows in the same statement — there is nothing to recreate and no data to move by hand. The breaking change in this release is on the device side, not in the upgrade and not in the API.
  • Any device that answers a command must now echo the dispatch nonce it was sent. The same command can legitimately be published more than once, and without the nonce an answer to a superseded dispatch was settling the newer one with the older one's outcome. An answer that omits it is refused and kept as a dead letter rather than settling the command — so nothing the device reported is lost. The population this affects is devices built outside the platform, which nothing can enumerate, so watch devicechain_commanddelivery_command_delivery_responses_without_nonce_total after upgrading: it should be zero on a fleet that is fully updated. Devices on the .NET/Unity SDK are fixed by upgrading the SDK.
  • Do one thing before you upgrade: check your event-source listener ports for a collision. Two listeners on one port used to kill an ingest transport silently, inside a goroutine, with nothing logged. Binds are now synchronous and fatal, so a collision that has been quietly broken for months will crash-loop the deployment instead of hiding.
  • Services now refuse to start on configuration they used to accept and ignore: a misspelled key, an instance root key that is wrong rather than malformed, a shutdown drain window longer than half the pod's grace period, two listeners on one port, and a listener port already in use. Each is safer than the silence it replaces, and each can stop a pod that has been running for months. Two chart details go with them: infrastructure.metrics.httpPort is retired, and infrastructure.shutdown is now written by the chart rather than by hand.
  • If you alert on lwm2m-ingest's is_leader, it changes meaning: it is now raised when a replica acquires the lease rather than after it finishes building its term, so the false-leaderless window of up to 30 seconds per bound tenant after a failover disappears. A new is_serving gauge distinguishes a leader still building from a leader actually serving. Eleven metric series are added across the platform and none are renamed or removed.
  • A command the platform cannot publish now fails and says so, instead of cycling between queued and sent for days and then recording a timeout that blamed the device. Dead letters for a blocked connector destination now read unprocessable rather than exhausted — update any alert keyed on the old value. Alarm state changes that could not be published are now dead-lettered and counted rather than lost.
  • The .NET/Unity SDK carries the command-nonce change; upgrading it is how a device built on it keeps answering commands. The npm packages — @devicechain/client, @devicechain/dashboards, @devicechain/widgets and @devicechain/brand — have no source changes, though @devicechain/widgets moves its maplibre-gl peer range from ^6.6.0 to ^6.7.0, which matters if you pin that dependency yourself.

Full upgrade notes for v0.16.0 →

Changelog

Read more

v0.16.0-rc.1

v0.16.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 17:39
7d385e6

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim.
See Pre-1.0 stability.

What's in v0.16.0

Important

This release contains breaking changes. They are described in the first
bullets below and in full in the upgrade notes.

  • A plain helm upgrade from v0.15.x. One migration runs itself as command-delivery starts, adding a column with a default and backfilling existing rows in the same statement — there is nothing to recreate and no data to move by hand. The breaking change in this release is on the device side, not in the upgrade and not in the API.
  • Any device that answers a command must now echo the dispatch nonce it was sent. The same command can legitimately be published more than once, and without the nonce an answer to a superseded dispatch was settling the newer one with the older one's outcome. An answer that omits it is refused and kept as a dead letter rather than settling the command — so nothing the device reported is lost. The population this affects is devices built outside the platform, which nothing can enumerate, so watch devicechain_commanddelivery_command_delivery_responses_without_nonce_total after upgrading: it should be zero on a fleet that is fully updated. Devices on the .NET/Unity SDK are fixed by upgrading the SDK.
  • Do one thing before you upgrade: check your event-source listener ports for a collision. Two listeners on one port used to kill an ingest transport silently, inside a goroutine, with nothing logged. Binds are now synchronous and fatal, so a collision that has been quietly broken for months will crash-loop the deployment instead of hiding.
  • Services now refuse to start on configuration they used to accept and ignore: a misspelled key, an instance root key that is wrong rather than malformed, a shutdown drain window longer than half the pod's grace period, two listeners on one port, and a listener port already in use. Each is safer than the silence it replaces, and each can stop a pod that has been running for months. Two chart details go with them: infrastructure.metrics.httpPort is retired, and infrastructure.shutdown is now written by the chart rather than by hand.
  • If you alert on lwm2m-ingest's is_leader, it changes meaning: it is now raised when a replica acquires the lease rather than after it finishes building its term, so the false-leaderless window of up to 30 seconds per bound tenant after a failover disappears. A new is_serving gauge distinguishes a leader still building from a leader actually serving. Eleven metric series are added across the platform and none are renamed or removed.
  • A command the platform cannot publish now fails and says so, instead of cycling between queued and sent for days and then recording a timeout that blamed the device. Dead letters for a blocked connector destination now read unprocessable rather than exhausted — update any alert keyed on the old value. Alarm state changes that could not be published are now dead-lettered and counted rather than lost.
  • The .NET/Unity SDK carries the command-nonce change; upgrading it is how a device built on it keeps answering commands. The npm packages — @devicechain/client, @devicechain/dashboards, @devicechain/widgets and @devicechain/brand — have no source changes, though @devicechain/widgets moves its maplibre-gl peer range from ^6.6.0 to ^6.7.0, which matters if you pin that dependency yourself.

Full upgrade notes for v0.16.0 →

Changelog

Read more

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 16:26
53b92a3

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim.
See Pre-1.0 stability.

What's in v0.15.0

Important

This release contains breaking changes. They are described in the first
bullets below and in full in the upgrade notes.

  • A plain helm upgrade from v0.14.x — nothing to recreate, no data to migrate by hand, and the new migrations run themselves as the services start. The breaking changes in this release are in the API and in outbound network access, not in the upgrade: if you run the platform and call it only through the console, there is nothing you need to do.
  • Update operations no longer replace the whole record. Previously a field you left out of an update was erased; now a field you do not mention is left exactly as it was, and clearing a value takes an explicit null. The request is a new shape that no longer carries the record's own name, so applications calling the API directly must drop that name and regenerate their client code — a request in the old shape is refused outright rather than half-applied. The one case that changes quietly is an application that cleared a value by leaving the field out: it will now keep the old value instead.
  • Outbound connections to private addresses are now refused, and this one can surprise you. Notification webhooks, SMTP relays and connector HTTP calls are blocked from reaching loopback, private, carrier-NAT, link-local and cloud metadata addresses, and a blocked destination is treated as final rather than retried. If your alarm mail goes through a relay inside the cluster, it will stop being delivered until you list that address under the new egress allow-list. Destinations on the public internet are unaffected.
  • The id on a stored event is now the event's own identifier rather than a value assembled from the device, type and timestamp, so ids saved from an earlier release no longer match anything. The previous form was not unique — two readings taken at the same instant produced the same id — so a client that treated it as a key was silently merging rows.
  • If you run the MCP server, two things need your attention: a resource URL with a trailing slash is now refused at startup rather than quietly mismatching, and the protected-resource metadata has moved to the location the specification actually defines. If you terminate ingress yourself, that path needs a route. Separately, two configuration keys are gone from event-sources: a debug key inside an eventSources entry must be removed before the service will start, and inboundEventBatching is retired more gently — stripped at load with a warning.
  • Commands now go out the moment they are enqueued instead of waiting for the next sweep, and how often that sweep runs is yours to set. Also new: dead letters you can actually read and query, a reporting view for pointing a BI tool at your telemetry, parent/child hierarchy for assets and a way to replace a device, bulk alarm acknowledgement, and a per-tenant console language.
  • The published packages are unchanged. @devicechain/client, @devicechain/dashboards, @devicechain/widgets, @devicechain/brand and the DeviceChain.Sdk package for .NET and Unity carry no source changes in this release — but if your own code sends update mutations through them, that is your code to regenerate.

Full upgrade notes for v0.15.0 →

Changelog

Read more

v0.15.0-rc.2

v0.15.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Sep 15:49
53b92a3

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim.
See Pre-1.0 stability.

What's in v0.15.0

Important

This release contains breaking changes. They are described in the first
bullets below and in full in the upgrade notes.

  • A plain helm upgrade from v0.14.x — nothing to recreate, no data to migrate by hand, and the new migrations run themselves as the services start. The breaking changes in this release are in the API and in outbound network access, not in the upgrade: if you run the platform and call it only through the console, there is nothing you need to do.
  • Update operations no longer replace the whole record. Previously a field you left out of an update was erased; now a field you do not mention is left exactly as it was, and clearing a value takes an explicit null. The request is a new shape that no longer carries the record's own name, so applications calling the API directly must drop that name and regenerate their client code — a request in the old shape is refused outright rather than half-applied. The one case that changes quietly is an application that cleared a value by leaving the field out: it will now keep the old value instead.
  • Outbound connections to private addresses are now refused, and this one can surprise you. Notification webhooks, SMTP relays and connector HTTP calls are blocked from reaching loopback, private, carrier-NAT, link-local and cloud metadata addresses, and a blocked destination is treated as final rather than retried. If your alarm mail goes through a relay inside the cluster, it will stop being delivered until you list that address under the new egress allow-list. Destinations on the public internet are unaffected.
  • The id on a stored event is now the event's own identifier rather than a value assembled from the device, type and timestamp, so ids saved from an earlier release no longer match anything. The previous form was not unique — two readings taken at the same instant produced the same id — so a client that treated it as a key was silently merging rows.
  • If you run the MCP server, two things need your attention: a resource URL with a trailing slash is now refused at startup rather than quietly mismatching, and the protected-resource metadata has moved to the location the specification actually defines. If you terminate ingress yourself, that path needs a route. Separately, two configuration keys are gone from event-sources: a debug key inside an eventSources entry must be removed before the service will start, and inboundEventBatching is retired more gently — stripped at load with a warning.
  • Commands now go out the moment they are enqueued instead of waiting for the next sweep, and how often that sweep runs is yours to set. Also new: dead letters you can actually read and query, a reporting view for pointing a BI tool at your telemetry, parent/child hierarchy for assets and a way to replace a device, bulk alarm acknowledgement, and a per-tenant console language.
  • The published packages are unchanged. @devicechain/client, @devicechain/dashboards, @devicechain/widgets, @devicechain/brand and the DeviceChain.Sdk package for .NET and Unity carry no source changes in this release — but if your own code sends update mutations through them, that is your code to regenerate.

Full upgrade notes for v0.15.0 →

Changelog

Read more

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 18:09
1cd05bd

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog

v0.14.0-rc.1

v0.14.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:35
1cd05bd

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 00:35
699a212

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog

v0.13.0-rc.1

v0.13.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Aug 00:10
699a212

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog

v0.12.1

Choose a tag to compare

@github-actions github-actions released this 23 Aug 18:47
8325f27

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog

The generated changelog covered only the final commit: goreleaser walks back from the tag's parent, and v0.12.1-rc.1 sits there because the first candidate failed and was re-cut. Replaced by hand with the full v0.12.0..v0.12.1 range.

v0.12.1-rc.2

v0.12.1-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Aug 16:31
8325f27

Warning

Pre-1.0 release. Until v1.0.0, any release — including a patch — may change
APIs, schemas, or behavior without a compatibility shim. Check for a
"Breaking changes" section below before upgrading.
See Pre-1.0 stability.

Changelog