> For the complete documentation index, see [llms.txt](https://adatrack.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adatrack.gitbook.io/docs/changelog/2026-05.md).

# May 2026

## v1.5.3

### Bug Fixes (v1.5.3)

* **Plugin Admin — Enabled/disabled state persists across restarts:** When a plugin is disabled (or re-enabled) via **Admin > Plugins**, that state is now written to the database immediately. On the next server restart or deploy, the registry reads the persisted state — disabled plugins stay off, enabled plugins stay on. Previously, all compiled plugins would silently re-enable themselves after every restart regardless of the admin setting.
* **Chat Bot — Default notification preferences created on account link:** When a chat account is linked to AdaTrack for the first time, a default preferences record (alerts enabled, geofence enabled, telemetry disabled, min severity: warning, digest disabled) is now automatically created. Previously no preferences row existed until the user explicitly saved settings in the Preferences tab, which could cause notification delivery to behave inconsistently before any preferences were set.
* **Chat Bot — Telegram webhook preserved across server restarts:** The Telegram webhook registration is no longer deleted when the plugin stops. Telegram persists webhook URLs server-side, so the prior behaviour caused a brief window of dropped messages between shutdown and the next startup. The webhook is now removed only on explicit user action (clearing the bot token or disabling Telegram in the plugin config).
* **Chat Bot — AI responses delivered to correct chat:** The `chat_user_id` field is now forwarded correctly through the AI request event pipeline. Previously, when a Telegram or Slack user sent a free-text message that was routed to the AI Assistant, the response could fail to reach the originating chat if the user identifier was not propagated to the response event.

***

## v1.5.2

### Improvements & Fixes (v1.5.2)

* **UDP ingestion endpoint:** The SaaS ingestion hostname is now `ingest.adatrack.io` on port `9000`. A Cloudflare DNS A record (DNS-only, grey cloud) provides stable hostname resolution to the EC2 Elastic IP, so device firmware pointing at `ingest.adatrack.io:9000` is insulated from future IP changes. The default self-hosted UDP port is also updated to `9000`. All documentation, quickstart guides, and environment variable defaults have been updated to reflect the new port.
* **Chat Bot — Accounts tab as default:** The Chat Bot web page (`/plugins/chatbot`) now opens on the **Accounts** tab by default. The **Setup** tab (plugin credentials) is now visible only to Admin role users, preventing non-admin users from seeing sensitive webhook configuration.
* **Reports — Mobile history view:** The report history table renders as a card stack on screens narrower than 600px. Each card shows the report name, date, ownership badge, status indicator, and download button without horizontal scrolling.
* **Chat Bot — Linked accounts mobile layout:** The linked accounts table switches to a responsive card layout on mobile, with platform badge, username, linked date, and last command grouped per card.
* **Chat Bot — Activity log mobile layout:** The command activity log renders as cards on mobile, each showing timestamp, platform, command, and status without a horizontal table scroll.
* **Admin — Responsive layout:** The Admin page and Plugins panel adapt to narrow viewports — feature flag toggles pin the switch control with `flex-shrink: 0` and long key names use `word-break: break-all` to stay within bounds.

***

## v1.5.1

### Improvements & Fixes (v1.5.1)

* **AI Assistant — Mobile layout:** The floating chat drawer now expands to full-screen on mobile, resolving the triple-column collision where the sidebar, drawer, and content pane overlapped on narrow viewports.
* **AI Assistant — Session delete confirmation:** Deleting a conversation now shows a confirmation dialog. A Cancel / Delete flow prevents accidental data loss.
* **AI Assistant — Full-page view:** The dedicated session management page has been restructured for small screens. A back-button flow toggles between the history sidebar and the active conversation; daily and monthly quota bars are displayed separately.
* **Dashboard — Widget labels in edit mode:** Widgets now display human-readable names in the drag-and-drop editor (e.g. "Statistics Chart", "Report Button") instead of raw internal identifiers such as `STATS_CHART` and `REPORT_BUTTON`. Names are routed through i18n and respect the active locale.
* **Dashboard — Value widget overflow:** Numeric values scale with `clamp()` and break on long strings, preventing content from overflowing the widget boundary at any size.
* **Dashboard — Floating panel close icon:** The panel close control now uses a dedicated `×` icon with a tooltip and `aria-label`, replacing the ambiguous rotated history icon.
* **Dashboard — Panel toolbar (mobile):** The floating panel toolbar was redesigned with labelled stacked buttons for better legibility and touch-target size on mobile.
* **Reports — History table scrolling:** The report history table is now wrapped in a `ScrollArea` with `offsetScrollbars`, preventing the header, date column, and filter controls from being clipped on smaller screens.
* **Workflow editor — Nodes off-canvas:** The React Flow canvas applies `fitViewOptions` with 15% padding on load, ensuring all nodes are visible inside the viewport instead of being clipped at the canvas edge.
* **Script template modal — Narrow screens:** The template library modal switches to a single-column layout below 600px, preventing the preview pane from bleeding outside the dialog boundary.
* **Statistics — X-axis label position:** The chart X-axis label is repositioned to eliminate the detached floating "Time" label that appeared below charts.
* **Admin — Feature flag toggles:** Toggle rows with long flag key names no longer wrap and push the switch off-screen. The switch is pinned with `flex-shrink: 0`; key text uses `word-break: break-all`.
* **Layout — FAB clearance:** A global 80px bottom padding on the main content area ensures the floating action button never obscures the last row of content on statistics, dashboard, and admin pages.
* **Side navigation — Collapse animation:** The sidebar collapse/expand transition fades and slides labels smoothly; spacing is consistent across core and plugin navigation items.
* **i18n — AI Assistant (Slovak):** Slovak translations added for the session delete confirmation dialog (`delete_chat`, `delete_confirm.*` keys).

***

## v1.5.0

### Features & Enhancements (v1.5.0)

* **AI Assistant Plugin:**
  * A new opt-in plugin that embeds an LLM-powered chat interface throughout the platform. Supports Anthropic Claude (default model: `claude-sonnet-4-6`) and OpenAI as configurable providers.
  * **Floating action button** — a chat drawer accessible from every authenticated page. Open it from any screen to ask questions about your fleet without leaving your current context.
  * **Full-page chat** — a dedicated session management interface at `/plugins/ai_assistant/` with full conversation history.
  * **Dashboard widget** — an embeddable AI chat panel you can pin to any dashboard, scoped to specific device IDs for contextual answers.
  * **Workflow node** — a new `AI Analysis` node in AdaTrack Flow. Write a prompt template with `{{field}}` placeholders, inject live telemetry values, and receive LLM-generated text or structured JSON as workflow output.
  * **Telegram / Slack brain** — when the Chat Bot plugin is also enabled, free-text messages that aren't recognized as commands are automatically routed to the AI assistant, turning your Telegram or Slack bot into a natural-language interface for your fleet.
  * **Context-aware responses** — the assistant knows which page you are on and which devices you are viewing, so answers are relevant without extra prompting.
  * **8 built-in platform tools** — the assistant can look up device status, fetch recent telemetry, query alert history, inspect geofences, run statistics aggregations, and trigger workflows on your behalf.
  * **Token quota controls** — configurable per-user rate limits (requests per minute, daily tokens, monthly tokens) with an append-only audit trail. Quota progress is visible in the chat widget.
  * Requires Standard tier license (`plugin:ai_assistant`).
  * See the [AI Assistant Plugin Setup Guide](https://github.com/AdaTrack/adatrack_platform/blob/main/docs/guides/AI_ASSISTANT_PLUGIN_SETUP.md) for configuration instructions.

### Improvements & Fixes (v1.5.0)

* **Security — Go 1.26.3:** Backend binaries rebuilt on Go 1.26.3 (security release). `golang.org/x/net` updated to v0.53.0.
* **i18n — AI Assistant locale:** Full English and Slovak translations for all AI assistant UI strings (widget labels, session management, quota warnings, error messages, workflow node settings).
* **i18n — Namespace consistency:** All AI assistant tooltip keys migrated to the `ai_assistant:` namespace prefix, matching the convention used across the rest of the platform's locale catalogs.

***

## v1.4.0

### Features & Enhancements

* **Platform Internationalization (i18n):**
  * AdaTrack now supports multiple languages. Each user selects their preferred language in **Settings > Localization** — the interface switches immediately without a page reload, and the preference is restored automatically on every login.
  * **Supported languages:** English (`en`) and Slovak (`sk`). The infrastructure is locale-agnostic; adding further languages requires only new translation catalog files and a database migration.
  * **Full-stack coverage:** Language preference is applied uniformly across the dashboard UI, backend HTTP responses, validation error messages, email subjects and bodies (OTP, password reset, alert digests), geofence and telemetry alert notification text, and Chat Bot (Telegram and Slack) command responses.
  * The user's language preference is stored in `user_preferences` and included in the JWT at login — no extra database query is made per request to resolve the active language.
  * Locale catalogs are embedded in the Go server binary via `//go:embed`. Self-hosted operators receive i18n support automatically after upgrading — no new files to deploy and no environment variables to configure.
  * A dedicated **i18n CI check** (`i18n-check.yml`) runs on every pull request and fails if any locale file contains untranslated empty-string values, ensuring all locales stay complete before merging.
  * A **hardcoded-string scanner** (`scripts/scan-hardcoded-strings-backend/`, `scripts/scan-hardcoded-strings-frontend.mjs`) can be run locally or in CI to detect strings that bypass the i18n system.
  * See the [Localization & Language Support guide](https://github.com/AdaTrack/adatrack_platform/tree/main/docs/gitbook/documentation/features/localization.md) for setup instructions.
* **Chat Bot Plugin — Full Localization:**
  * All Chat Bot command responses sent to Telegram and Slack are now localized. Responses are sent in the language of the linked AdaTrack account, falling back to English for unlinked sessions.
  * Covers all 10 commands (`/help`, `/link`, `/unlink`, `/whoami`, `/devices`, `/device`, `/telemetry`, `/latest`, `/alerts`, `/status`), interactive notification bodies, alert and geofence message text, and daily digest summaries.

### Improvements & Fixes

* **CI/CD — Node.js 24:** All GitHub Actions workflows updated to Node.js 24, matching the current LTS toolchain.
* **CI/CD — i18n validation pipeline:** New `i18n-check.yml` workflow validates locale completeness and key consistency on every push and pull request.
* **Locale duplicate key checker:** `scripts/check-duplicate-keys.mjs` detects duplicate translation keys within a namespace, runnable via `make check-translations`.
* **Frontend build fixes:** Resolved `ignoreDeprecations` TypeScript config warning and several ESLint warnings introduced during the localization rollout.
* **Backend lint fixes:** Resolved linter warnings in i18n-related test files.
