Release Changelog

This section contains release changelogs automatically generated from Conventional Commits by the CI/CD Finalize-Sprint pipeline.

Release History

Changelogs are organized by release version under changelog/{version}/. A new version folder is published each time a release branch is finalized.

Each release contains:

File Description

qa.adoc

Jira ticket references only (refs: commits). Use this for QA tracking and verification.

external.adoc

Customer-facing changes: Jira refs, features, bug fixes, documentation, and maintenance.

all.adoc

Complete changelog including every conventional commit type.

External Components in a Release

Beyond the generated files, every release page (changelog/{version}/index.adoc) carries a hand-maintained External components in this release section: the versions of the third-party products this release was built and verified against — the base image, the application framework and the protocol libraries.

That section is written by hand because the generated files cannot produce it: they are derived from commit messages, and a dependency that did not change in a sprint leaves no commit behind while still being part of what the release was verified against.

The current values live in Third-Party Components and are copied into the release page when the release is cut.

Once a release is published, those same third-party versions — and the versions of every other FT service shipped alongside — also appear on FT Version Control, together with the upgrade steps between releases. That page is the platform-wide record across services; the section here describes only what this branch is built against right now.

Add the section to changelog/{version}/index.adoc only. qa.adoc, external.adoc and all.adoc are regenerated in full by the Finalize-Sprint pipeline, and anything hand-written in them is lost on the next run.

Current values

What this branch is built and verified against right now, and the set that gets copied into the first release page when a release is cut. It describes the current state of the branch — not a released version. The full list, with the pom each figure comes from, is in Third-Party Components.

Component Version Notes

Java

25

Language level and runtime (pom.xml)

Spring Boot

4.0.0-SNAPSHOT

Web UI and REST API. Not a release version — see the warning below

Eclipse Californium

2.0.0-M16

CoAP and DTLS transport for the CoAP, LwM2M and USP emulators. Milestone

Eclipse Leshan

1.0.0-M12

LwM2M client implementation. Milestone

Apache Commons Collections

4.5.0-M2

LRU-bounded session cache for the USP MTP. Milestone

Eclipse Paho MQTT

v3 1.2.0, v5 1.2.5

MQTT transport and the USP MQTTv5 MTP

protobuf-java

4.29.2

USP record and message encoding

BouncyCastle

1.81

TLS for the USP MQTTv5 MTP

MySQL

server version not pinned; driver managed by the Spring Boot BOM

Optional — only the Extract CPE from DB feature connects to a database

Base image

eclipse-temurin:25-jre-alpine

Runtime image the emulator is built from (Dockerfile)

Docker Engine / Compose

20.10+ / 2.0+

Recommended deployment method

Four of the figures above are not release versions — a SNAPSHOT and three milestones. They are recorded as they are, because a milestone and a release carrying the same number are different artifacts and do not resolve to the same jar. Any release cut from this branch carries them into its release page unchanged, until the build moves to released versions.

Changelog Format

Entries are derived from the commit message prefix:

Prefix Section

feat

Features

fix

Bug Fixes

perf

Performance

docs

Documentation

refactor

Refactoring

chore

Maintenance

refs: DEV-XXXX

Jira References (rendered as clickable links)

Example commit messages:

feat(gui): expose build info via /api/version
fix(usp): null-guard in UspDevice.addNewParameter
docs(installation): document FT_TLS_AUTH env var
refs: DEV-2132

Unreleased

Features

  • Java control client. A typed Java client for the control REST API, com.friendly.qa:ft-oneiot-emulator-client, for JUnit tests and the rig. It covers 50 of the 60 control operations. See Java Control Client. No version has been published yet; the first planned version is 0.1.0.

  • EST-coaps enrollment for LwM2M devices (PROD-584). A LWM2M device over UDP with DTLS and X.509 enrolls a certificate with /crts, /sen, and /sren (RFC 9148).

    • New options: lwm2m.est.uri, lwm2m.est.server_cert_sha256, lwm2m.est.fault. See EST enrollment.

    • New endpoints: POST /api/devices/{clientId}/est/enroll, POST /api/devices/{clientId}/est/reenroll, GET /api/devices/{clientId}/est, POST /api/devices/{clientId}/est/options. See EST endpoints.

    • Known limits:

      • Scandium 2.0.0-M16 accepts a ServerKeyExchange message without a signature. The pin does not stop an attacker on the network path.

      • The emulator copies the EST private key to /0/x/5. The unauthenticated REST API returns it. Never publish port 8556.

      • The integration test is pinned to ft-est-service commit 9815176.

  • LwM2M scale mode (multi-device load). One container can hold thousands of LwM2M devices. See LwM2M Scale Mode and Load Testing.

    • New switches: FTEMUL_VIRTUAL_THREADS / -Dftemul.virtualThreads (default off), ftemul.sharedPoolSize.

    • New credentials: lwm2m.psk.per_device, X.509 minting from a CA PKCS#12 (lwm2m.x509.ca.keystore, lwm2m.x509.ca.alias, lwm2m.x509.leaf.validity_days, lwm2m.x509.leaf.chain, password only from the file named by FTEMUL_X509_CA_PASSWORD_FILE).

    • New knob: lwm2m.scale.dtls.receive_buffer (default 2048, 1500 to 16490, scale mode only); over-limit datagrams are counted and logged as event=dtls-datagram-over-limit.

    • New tools under loadtest/: capacity tool, demo-host launcher and native measure tool.

Behaviour changes

  • ack_timeout and lwm2m.transport.protocol_stage_thread_cnt, receiver_thread_cnt and sender_thread_cnt below 1 (or non-numeric) are now refused when the device is created; they were accepted before.

  • WRITE-ATTRIBUTES on a server-Created LwM2M instance is now applied; it was dropped before.

Maintenance

  • The Docker image runs on JDK 27 (eclipse-temurin:27-jre-alpine, bytecode still 25) from commit 4eece4d; JAVA_OPTS carries --enable-final-field-mutation=ALL-UNNAMED. Images built before it run JDK 25.

  • BouncyCastle 1.81 to 1.85. This update clears 2 CRITICAL and 1 HIGH OSV advisories.

Releases