v0.1.6
·
59 commits
to refs/heads/main
since this release
What's new in v0.1.6
v0.1.6 builds Necromancer out into a full self-healing framework — everything since v0.1.5.
Added
- PoE recovery — a single PoE fabric resolves a device to its port and power-cycles it, with last-known-port fallback and coalesced concurrent cycles (no double-cycling); new
necromancer.repair_poe_portservice and apoe_portrecovery strategy. - YAML import/export of the flat PoE-port list in the options flow.
- Guard groups (linking) — link guards that share a root cause; when one repairs, the others hold and re-verify instead of competing. Follower success is silent by default (opt-in per guard).
- Supervisor / staged guards — a guard whose health template watches other guards' status; with self-reference (feedback-loop) detection.
- Operator services — per guard
reset/snooze/unsnooze, plus bulksnooze_all/unsnooze_all(maintenance mode); newsnoozedlifecycle state (survives restart, auto-resumes). - Recovery event entity —
event.<guard>_recoveryfiresrecovered/escalated/blocked. - Notifications as an action — a user-defined action sequence with
message/name/event/event_textvariables; TTS-friendly, EN + DE. - Optional integration reload of the assigned device after a repair (before verify).
- Blind-guard detection — a template health that reads only missing/disabled entities is flagged.
Changed
- Recovery mode choice moved from the device step into the strategy step of the wizard.
- Auto-recovery switch is now a configuration entity; leaner status-sensor attributes.
- Architecture: domain logic split into a
core/package (HA shell vs. core); typedentry.runtime_data(NecromancerData);LinkCoordinatorand the config-flow schema/selector layer extracted; the PoE fabric is the single PoE authority (thepoe_portdriver is a thin adapter).
Fixed
- Linked-guard teardown & follow-up verify are now race-safe.
- Don't last-known-cycle a PoE port that now serves a different device; ignore placeholder port ids (
-, empty,unknown). - Ignore a manual recover while a cycle is already running.
- Reject action guards with no action at submit; reject negative timings on YAML import.
- Logging cleanup: correct levels, and no full traceback per recovery attempt (less log noise).
- Hardened several guard-linking corner cases.
Quality & docs
- Test net: unit + engine + in-process integration suites and a pytest suite on HA's native harness (entities, services, full config/subentry/options flow) — ~91 % line coverage;
hassfest- andruff/format-clean. - README rewritten as a user guide (mental model, lifecycle, entities, services, recipes, FAQ);
docs/arch/architecture + testing + timing references.