github sfox38/whodunnit v1.3.0

6 hours ago

Version 1.3.0

1 May 2026

  • Architecture: Replaced per-sensor global event listeners with a single shared listener set. Previously, each tracked entity registered its own listeners for all automation, script, and service call events system-wide, scaling as O(N). Now a single set of listeners populates a shared context cache that all sensors read from.

  • Fixed a race condition where rapid consecutive state changes during a user identity lookup could produce a sensor state mixing fields from two different events.

  • User identity cache now expires after 5 minutes. Previously, person name and service account status were cached permanently until HA restarted, causing stale classifications after person renames or account changes.

  • Cached the bleed-platform check per entity (resolved once at setup rather than on every state change).

  • Added entity_category: diagnostic so the sensor is properly excluded from energy dashboards, voice assistants, and area summaries.

  • Added SensorDeviceClass.ENUM with a defined options list for richer UI support.

  • Added target entity availability tracking - the sensor now reports unavailable if the tracked entity is removed from HA.

  • Added diagnostics support (Settings -> Integrations -> Whodunnit -> Download diagnostics).

  • Migrated device_info from plain dicts to the typed DeviceInfo dataclass.

  • Validated restored state on startup - invalid state slugs from older versions are now logged and reset to monitoring instead of silently persisting.

  • Removed unused imports and dead code.

  • Breaking changes:

    • Default attribute values (source_type, source_id, user_id, event_time, context_id) changed from the string "None" to actual null. Update any automations or templates that test for the string value "None" - use is none or == None in Jinja2 templates instead.
    • The source_id for unresolved automation chains changed from automation.indirect to whodunnit.indirect. Update any automations filtering on source_id: automation.indirect.

Don't miss a new whodunnit release

NewReleases is sending notifications on new releases.