github frenck/spook v5.1.0

7 hours ago

👻👻👻👻👻👻👻👻👻👻

Spook 5 was about making detection trustworthy. Spook 5.1 gives you things to build with.

The big one is a trigger and condition platform: ten triggers and seven conditions, living in your automations next to the ones Home Assistant ships. A cron trigger for schedules the built-in ones cannot express. A stale trigger for a sensor that quietly stopped reporting without ever going unavailable. A watchdog for the thing that should have happened and did not. Sequences, flapping detection, quotas, cooldowns, and conditions that tell you who set an automation off, a person or another automation.

Detection did not stand still. Twenty-three new repairs: orphaned long-term statistics, forgotten long-lived access tokens, empty areas and floors, unused labels and blueprints, dashboard resources pointing at files that are gone, alerts that will not work when they are needed, notify groups delivering into the void.

There are new actions too. automation.snooze turns an automation off for a while and puts it back on when the time is up, restarts included, so a snooze does not quietly become a disable. automation.turn_on_for is the same trick the other way round, for the guest mode you switch on in December and find again in March.

A stability round went in right before this release. The whole codebase was reviewed from the outside, and nine real bugs came out of it, including two repairs that told people their perfectly good automations were broken. That is the worst thing Spook can do, so those are gone.

Thanks to everyone who helped out on this one!

../Frenck

                       

Blogging my personal ramblings at frenck.dev
Or subscribe to my bi-weekly newsletter: https://frenck.dev/newsletter

✨ New features

🐛 Bug fixes

  • Fix known floor IDs defaulting to label IDs @frenck (#1340)
  • Fix garbled debug logging in script reference repairs @frenck (#1341)
  • Fix broken edit links for YAML items without an ID @frenck (#1343)
  • Clean up repair issues for removed items reliably @frenck (#1342)
  • Fix repair issue cleanup on unload never matching @frenck (#1345)
  • Detect stale targets nested in repeat steps in automations @frenck (#1355)
  • Detect stale targets nested in repeat steps in scripts @frenck (#1356)
  • Stop reporting devices split by Home Assistant Core 2026.8 as unknown @frenck (#1413)
  • Fix input_number increment/decrement/min/max services after HA 2026.8.0 @Dillton (#1407)
  • Guard device enable/disable helpers against via_device_id cycles @proscar87 (#1401)
  • Set repairs up when loaded on a running Home Assistant @frenck (#1435)
  • Report missing scenes instead of ignoring every scene @frenck (#1436)
  • Stop calling a helper API that Home Assistant is removing @frenck (#1438)
  • Stop reporting action names as unknown entities @frenck (#1440)
  • Recheck people when a state-only device tracker comes or goes @frenck (#1448)
  • Notice an entity dying or returning without waiting for a coincidence @frenck (#1451)
  • Say what went wrong instead of printing a tuple @frenck (#1456)
  • Stop reading the device registry as a mapping @frenck (#1471)
  • Handle child devices in the device actions @frenck (#1474)
  • Build the service set once per inspection, not once per template @frenck (#1488)
  • Tie a sequence deadline to the run that set it @frenck (#1490)
  • Stop the Home Assistant dev canary reading core's built translations @frenck (#1496)
  • Fix two repairs that had quietly stopped looking @frenck (#1497)
  • Three more from the stability review @frenck (#1500)
  • Four from the second stability review @frenck (#1501)

🚀 Enhancements

  • Add regression test for templated action names in service repairs @frenck (#1344)
  • Add end-to-end repairs test and reset cache state between tests @frenck (#1347)
  • Isolate setup failures so one broken feature cannot take down Spook @frenck (#1346)
  • Remove dead pre-2025.10 compatibility branch @frenck (#1349)
  • Move entity ID cache from module globals into hass.data @frenck (#1350)
  • Migrate script reference repairs to the shared base class @frenck (#1351)
  • Yield to the event loop during repair inspections @frenck (#1352)
  • Split template extraction out of entity_filtering and cache template scans @frenck (#1353)
  • Add target reference walker for raw configurations @frenck (#1354)
  • Migrate source-entity repairs to the config entry table @frenck (#1362)
  • Add generic dashboard entity reference walker @frenck (#1363)
  • Use the generic walker in the Lovelace repair @frenck (#1364)
  • Explain why referenced entities are unknown @frenck (#1368)
  • Enrich unknown entity issues across all repairs @frenck (#1369)
  • Make the stale access token repair dismissable @frenck (#1381)
  • Offer a fix-it-myself link in repair fix flows @frenck (#1382)
  • Fix some minor typos @cnotin (#1398)
  • Qualify entity references only disabled steps make @pos-ei-don (#1400)
  • Stop comparing every unknown entity against every known one @frenck (#1439)
  • Only wake the alert repair for entities an alert watches @frenck (#1447)
  • Only wake the person repair for device trackers @frenck (#1449)
  • Build the service set once per inspection, not once per template @frenck (#1488)
  • Add an automation.turn_on_for action @frenck (#1495)
  • Three more from the stability review @frenck (#1500)

🧰 Maintenance

  • Add Home Assistant dev canary and helper repair smoke tests @frenck (#1348)
  • Bump Home Assistant to 2026.8.2 in the development environment @frenck (#1414)
  • Translations update from Hosted Weblate @weblate (#1332)
  • Translations update from Hosted Weblate @weblate (#1329)
  • Translations update from Hosted Weblate @weblate (#1445)
  • Say what went wrong instead of printing a tuple @frenck (#1456)
  • Translations update from Hosted Weblate @weblate (#1454)
  • Build the documentation from a locked MyST version @frenck (#1457)
  • Translations update from Hosted Weblate @weblate (#1455)
  • Keep blank strings out of the translation files @frenck (#1460)
  • Translations update from Hosted Weblate @weblate (#1465)
  • Catch the exception the condition_met test means to catch @frenck (#1487)
  • Stop the Home Assistant dev canary reading core's built translations @frenck (#1496)

📚 Documentation

⬆️ Dependency updates

30 changes

👻👻👻👻👻👻👻👻👻👻

Don't miss a new spook release

NewReleases is sending notifications on new releases.