packages feed

status-notifier-item-0.3.2.16: ChangeLog.md

# Changelog for status-notifier-item

## Unreleased

## 0.3.2.16 - 2026-07-15
- Host: normalize the random `Id`, item path, and menu path generated by
  Ayatana StatusNotifierItem implementations when building logical duplicate
  keys. Multiple instances of the same application now collapse to one tray
  item even when each instance advertises a different generated identity.
- Add regression coverage for generated Ayatana identities while preserving
  distinct identities for ordinary StatusNotifierItems.

## 0.3.2.15 - 2026-07-02
- Bound every DBus call made during host and watcher startup with a timeout so
  a single unresponsive item (a process that owns its `StatusNotifierItem` bus
  name but never services its connection) can no longer hang startup
  indefinitely. Previously such an item would block `Host.build` (and any tray
  UI built from it) and the watcher's cache-validation pass forever, since the
  `dbus` library does not time out method calls on its own.
- Watcher: bound the per-item introspection performed while validating cached
  items during startup; unresponsive items are dropped instead of blocking the
  watcher before it exports its object.
- Host: bound the per-item property fetch in `buildItemInfo` and the
  `RegisterStatusNotifierHost`/`RegisteredStatusNotifierItems` watcher calls.

## 0.3.2.14 - 2026-05-13
- Clean up generated DBus client, service, and watcher code for newer compiler
  warning compatibility.
- Keep watcher startup behavior unchanged after reverting an experimental
  synchronous startup path.

## 0.3.2.13 - 2026-03-30
- Host: suppress no-op property update notifications when a signal arrives but
  the refreshed item value is unchanged, avoiding redundant tray updates.
- Add a regression test covering unchanged-vs-changed `NewTitle` updates.

## 0.3.2.12 - 2026-03-30
- Fix the `HostSpec` test helper's overloaded-string inference so the test
  suite builds cleanly with newer GHC/`dbus` combinations, restoring the
  status-notifier-item Stackage nightly upgrade path.

## 0.3.2.11 - 2026-03-29
- Watcher: accept explicit SNI registrations initiated from a separate unique
  bus name owned by the same process, fixing KDE/Qt multi-connection
  registrations.
- Host: deduplicate logical items across bus-name churn so tray hosts keep a
  single logical icon when senders change identity.
- Add regression tests for the multi-connection registration and bus-name churn
  deduplication cases.

## 0.3.2.10 - 2026-02-17
- Relax upper bounds to restore Stackage nightly compatibility:
  `optparse-applicative < 0.20` and `template-haskell < 2.24`.

## 0.3.2.9 - 2026-02-17
- Version bump only; no library changes beyond `0.3.2.8`.

## 0.3.2.8 - 2026-02-17
- Host: eliminate duplicate `ItemAdded` deliveries to newly-registered update
  handlers by making handler registration + initial replay atomic with respect
  to item map updates.
- Add a deterministic host integration test that reproduces and guards against
  duplicate `ItemAdded` events from replay/live-update races.

## 0.3.2.7 - 2026-02-13
- Watcher: default `--log-level` is now INFO.
- Watcher: log item/host registrations at INFO; keep per-request method/property
  tracing at DEBUG to avoid spamming.
- Host: downgrade noisy INFO/WARNING logs (signal dumps, handler updates, and
  expected removal/mismatch cases) to DEBUG.

## 0.3.2.6 - 2026-02-13
- Watcher: persist item/host registrations to an XDG cache JSON file and
  restore on startup with validation (bus owner + object/interface checks).
- Watcher: keep persisted state in sync across registrations/unregistrations and
  deduplicate/replace owner-equivalent path registrations.
- Host: reconcile item state when watcher ownership changes so stale items are
  removed after watcher restarts.
- Add integration tests for cache restore, stale-cache pruning, post-restore
  deduplication, and host watcher-owner-change reconciliation.

## 0.3.2.5 - 2026-02-12
- Test suite: start an isolated `dbus-daemon` using a session config shipped
  alongside the `dbus-daemon` executable when available (fixes Nix sandbox
  builds where `/etc/dbus-1/session.conf` is absent).

## 0.3.2.4 - 2026-02-12
- Host: deduplicate items that re-register under a different bus name after a
  watcher restart (e.g. unique name vs well-known name), preventing duplicate
  tray icons.
- Add a regression test for watcher-restart re-registration deduplication.

## 0.3.2.3 - 2026-02-11
- Downgrade unknown-sender update logs from WARNING to DEBUG to avoid noisy
  false alarms for routine tray signals.
- Treat UnknownMethod property refresh failures as expected optional-property
  misses (same as InvalidArgs), logging them at DEBUG unless no updater
  succeeded.
- Add host tests for property update failure log-level classification.

## 0.3.2.2 - 2026-02-11
- Fix watcher registration ownership checks by requiring explicit service-name
  registrations to be initiated by the current owner.
- Fix watcher duplicate handling by coalescing path-first and name-first
  registrations from the same sender/path pair.
- Add an isolated DBus integration test suite covering watcher/host behavior
  and regression tests for registration ownership and deduplication.

## 0.3.2.1 - 2026-02-09
- Add name-owner resolution fallback for signal sender identification, fixing
  noisy errors when items register under well-known bus names.
- Downgrade "Failed to identify sender" log from ERROR to DEBUG when the item
  simply does not implement the getId method.
- Downgrade "Property update failures" log from ERROR to DEBUG when the failures
  are InvalidArgs (item does not support optional properties like OverlayIcon).

## 0.3.2.0 - 2026-02-05
- Report full `bus/path` identifiers for non-default SNI object paths so hosts
  can resolve Ayatana items reliably.
- Accept `bus/path` identifiers in watcher/host lookups for compatibility with
  pathful registrations.