---
title: v4.0.14 Changelog
description: See what's new in Kener v4.0.14, including new features, improvements, and bug fixes
---

## Breaking changes {#breaking-changes}

### Group monitor scoring model revised {#group-scoring-model-revised}

The group monitor status scoring has been changed from an unnormalized scale to a normalized 0–1 scale.

**Old model:**

| Status   | Score |
| :------- | :---- |
| UP       | 0     |
| DEGRADED | 1     |
| DOWN     | 2     |

Thresholds: `< 1` → UP, `>= 1` → DEGRADED, `>= 2` → DOWN

**New model:**

| Status   | Score |
| :------- | :---- |
| UP       | 1     |
| DEGRADED | 0.5   |
| DOWN     | 0     |

Thresholds: `= 1` → UP, `> 0 and < 1` → DEGRADED, `= 0` → DOWN

Members in `MAINTENANCE` are treated as UP (score `1`) and do not affect the group status.

**Impact:** Group monitors will now show **DEGRADED** when any member is down or degraded, instead of staying UP. Previously, with 5 equal-weight monitors, 1 DOWN member produced a score of `0.4` (UP). Now it produces `0.8` (DEGRADED).

No configuration changes are needed — existing group monitor weights and settings remain valid.

> [!IMPORTANT]
> If you have alerting rules that trigger on DEGRADED status, they will fire more frequently after this update.

## New features {#new-features}

### Localized status badges {#localized-status-badges}

Status badges now support a `locale` query parameter. The status text (Operational, Degraded, Down, etc.) is rendered in the selected language when that locale is activated in your i18n settings.

```
/badge/{tag}/status?locale=de
```

The badges page in the admin dashboard includes a language selector for status badges.

### Server-side search and filters for monitors {#monitors-search-filter}

The monitors list in the admin dashboard now supports server-side search by name or tag and filtering by status. A collapsible filter panel with Search and Clear buttons replaces the old client-side filtering.

### Filters for monitoring data {#monitoring-data-filters}

The monitoring data page in the admin dashboard now uses the same collapsible filter panel pattern with explicit Search and Clear buttons instead of auto-fetching on filter changes.

## Bug fixes {#bug-fixes}

### Environment variables in webhook trigger URLs {#webhook-env-vars}

Fixed environment variables (e.g. `$TELEGRAM_BOT_TOKEN`) not being replaced in webhook trigger URLs. The URL was not included in the environment secret scan. Slack and Discord were already working correctly. ([#647](https://github.com/rajnandan1/kener/issues/647))

### Webhook template `alert_incident_url` missing quotes {#webhook-template-quotes}

Fixed the default webhook alert template producing invalid JSON when `alert_incident_url` had a value — the URL was rendered without surrounding quotes.

### Notification duration localization {#notification-duration-localization}

Fixed the "Ongoing" text in notification event durations not being passed through the translation function.

## Improvements {#improvements}

### Dynamic version in notification user-agent {#dynamic-user-agent}

Webhook, Slack, and Discord notification HTTP requests now send the actual Kener version in the `User-Agent` header instead of a hardcoded `Kener/4.0.0`.

### Translation updates {#translation-updates}

Added new status-related translation keys across all supported locales.
