Full Changelog 1.0.1
Released 2026-07-25 · v7.1.1 sprint · 3 issues · 2 features · 6 fixes
The complete record: every commit in the release, grouped by type, including work that never reaches a customer-facing note. The external changelog is the readable summary of the same release.
Jira References
-
DEV-2615 - FT Configs Service > ACS Configuration > Event Delivery > MAC Address binding > hardcodedEventMacAddressMapping > Update description
-
DEV-2689 - FT Configs > Swagger > Authentication > Any method > Request body > Invalid JSON input schema
-
DEV-2691 - FT Configs UI > Login screen > Unauthorized user > No option to reset/restore a password
Features
-
Expose mail availability in environment snapshot
Add a config-derived mailAvailable boolean to GET /environment/snapshot, sourced from MailDeliveryStatus.isOffline() so the UI can tell whether the deployment is set up to send email. Uses the config-only check (no live SMTP probe) because the endpoint is public and unauthenticated.
-
DEV-2691 - FT Configs UI > Login screen > Unauthorized user > No option to reset/restore a password
Bug Fixes
-
Reseed custom-params per client type to match original runtime
Reproduce the old oneiot per-client behavior exactly instead of the def-only union. Seed def/sc/mc (24 groups, 75 items): def = hardcode wildcards only (ipAddress 8 wildcards, macAddress %MACAddress); sc = hardcode overwritten by sc-JSON (ipAddress 8 incl. the 4 ManagementServer params, macAddress 12) plus hardcode-only nodeBID/BSID; mc = same as sc but ipAddress 4 (no ManagementServer). JSON values stored with raw .i.; the publisher transforms .i.→.%. at read. All three client types keep nodeBID/BSID from the hardcode. In-place rewrite of the unreleased seed changeSet, MySQL/Oracle portable. Adds per-client CustomParamCacheService tests (sc ipAddress=8, mc=4, def wildcards; warmup caches all three).
-
Add 15 missing interface items for master parity
The refactor emptied oneiot interfaceItems.json (migrated to config-service); ft-configs seeded 67 of master’s 82 items. Add the missing 15 via an append-only dated changeSet: 2 in the ai chatbot group (AIChatTimeout, AIHistoryMaxChats) and 13 STRING items in the system reports group (device/report navigation ids). Values mirror master verbatim; MySQL/Oracle portable; interface-item count now 82.
-
Restore in-prod custom-params changeset, add additive per-client parity
The prior reseed rewrote the already-applied 2025-08-18 custom-params changeSet in place, which breaks Liquibase checksum validation on prod (an applied changeSet is immutable). Restore 2025-08-18-custom-params.xml byte-for-byte to its prod content (def-only union, checksum intact). Achieve sc/mc parity through a new additive changeSet 2026-07-11-custom-params-per-client-parity.xml (pure INSERT: sc 8 groups/30 items incl. 4 ManagementServer, mc 8/26; rollback deletes only sc/mc). def is left as the prod union deliberately: the runtime boevoy path is sc-hardwired and def serves only as a fallback, so touching prod def-data is unwarranted. Reconcile the def unit test to assert the truthful prod union shape (16 ipAddress / 13 macAddress).
-
Validate list elements on app-port and user-info import
Move @Valid onto the list element type so each item in the imported list is validated, not just the list container.
-
DEV-2615 - FT Configs Service > ACS Configuration > Event Delivery > MAC Address binding > hardcodedEventMacAddressMapping > Update description
-
DEV-2689 - FT Configs > Swagger > Authentication > Any method > Request body > Invalid JSON input schema
Documentation
-
Update antora version to 1.0.1
-
Update antora version to 1.0.2 (dev)
-
Add changelog for release 1.0.1
-
Revert premature 1.0.1 release, set dev version to 1.0.1-dev
-
Revert premature 1.0.1 release, restore main version to 1.0.0
Chores
-
Bump version to 1.0.1
-
Parallelize CI test suites on rd-runner
Split the single sequential
gradlew buildinto two parallel jobs on the self-hosted rd-runner:verify(unit + MySQL IT + coverage + SpotBugs
JAR) andoracle-it(Oracle IT). Unit + MySQL IT provide full JaCoCo coverage, so the 90/85 gate and SpotBugs HIGH stay onverify; Oracle IT is a DB-compatibility check and runs off the critical path.This cuts build wall-clock (previously ~12-15 min) by overlapping the Oracle suite and by reusing the runner’s persistent Docker image cache instead of re-pulling the ~2 GB Oracle image each run. The Docker publish still waits for both suites, so a green full run precedes every dev image.
Also bump actions/checkout to v7 in the callable build workflow.
-
Bump Spring Boot 4.1.0, shared-dto 0.0.16, and libraries
Fix the shared-dto pin 0.0.14 → 0.0.16: the code imports classes (ProductClassGroupCacheDto, configsdto.*, api.auth.ClientType) absent from the published 0.0.14. Local builds compiled only because a rebuilt 0.0.14 shadowed the registry via mavenLocal; a clean CI checkout failed to compile. 0.0.16 is published with all required classes.
Bump Spring Boot 4.0.3 → 4.1.0 and update libraries to latest stable: ojdbc11 23.26.2.0.0, jaxb-runtime 4.0.9, springdoc 3.0.3, swagger-annotations-jakarta 2.2.52, hazelcast 5.7.0, caffeine 3.2.4, testcontainers 2.0.5, archunit 1.4.2, jqwik 1.10.1, xmlunit-assertj3 2.12.0, mockwebserver 5.4.0, ft-cache 0.0.9, spotbugs 4.10.2.
Verified: compile, unit tests, and SpotBugs pass. Integration suites (MySQL/Oracle) are run separately.
-
Serialize integration tests after unit tests and SpotBugs
With org.gradle.parallel=true the verify job ran spotbugsMain (effort=max) and the unit test forks concurrently with integrationTestMySql. The CPU starvation dropped the Hazelcast client heartbeat inside the IT Spring context, causing flaky TargetDisconnectedException failures. Order the integration suites after the CPU-heavy tasks so each IT run gets the whole machine; mustRunAfter is a no-op when those tasks are absent from the graph.
-
Add temporary SMTP listener diagnostic to verify job
UserDeletionUnreachableMailMySqlIT began failing only after CI moved from ubuntu-latest to self-hosted rd-runner. The IT probe hits localhost:25 (JavaMail default), so a local MTA on the runner would flip otpRequired to true. Log the listener state to confirm before fixing. Temporary; revert after triage.
-
Fix build
Refactoring
-
Drop Invalid classification from custom params, keep only warnings
Unknown or excluded parameter names are now surfaced as non-blocking warnings instead of hard Invalid errors: a concrete name absent from the parameter cache may be intentionally excluded, so it must not fail validation. Import no longer rejects unknown names, so the dry-run preview matches the actual import.
Also narrow wildcard/regex detection to the real placeholders (.i. / %) so names like Device.WiFi.SSID.1.SSID are not mistaken for patterns, escape literals in SQL-LIKE pattern matching so dots are not treated as wildcards, and mark the rich-view per-item error flag as always false (kept for API compatibility).
Tests
-
Probe the configured SMTP address in integration mail sender
NoOpMailSender was created empty, so MailDeliveryStatus.canConnect() ran JavaMailSenderImpl.testConnection() against JavaMail’s localhost:25 default instead of the address the test configures. On self-hosted runners a local MTA listens on :25, so the probe succeeded and UserDeletionUnreachableMailMySqlIT observed otpRequired=true (it stayed green on ubuntu-latest, which has no MTA). Configure the sender from MailProperties with finite timeouts so the probe targets the declared unreachable address on every runner. Also drop the temporary diagnostic step from the release workflow.
-
Tag the embedded-Hazelcast IList behavior test as slow
Lets the fast unitTest task skip the real Hazelcast member spin-up.
Docker Images
ft-configs-service
- Image
-
hub.friendly-tech.com/configs/ft-configs-service:v1.0.1-b0.0.1 - SHA256
-
sha256:8e3e300e410f20a3bc1ce81c7ecf9cec6f0c2c42470298c4597d7f5cbd444a68
Dependencies
-
ACS → FT Configs Service
v1.0.1-b0.0.1 -
FT Configs UI → FT Configs Service
v1.0.1-b0.0.1 -
Northbound API → ACS
v7.1.1-b0.0.1 -
FT Device Network → ACS
v7.1.1-b0.0.1 -
FT Device Network → UI Backend
v7.1.1-b0.0.1 -
UI Portals → UI Backend
v7.1.1-b0.0.1 -
UI AI Agent → UI Backend
v7.1.1-b0.0.1 -
UI AI Agent → FT Device Network
v1.0.2-b0.0.1 -
UI Backend → ACS
v7.1.1-b0.0.1