feat(events): expand IoX-6 system event taxonomy from UDI's UDEvents.h#176
Conversation
Adds the system-event vocabulary UDI shipped in their subscription-events reference doc (system editor / ZMatter Z-Wave / system upgrade / new ZigBee driver) and the three node-lifecycle verbs we'd been missing — most importantly _3/NI (the primary nodedef-changed signal). All additions are diagnostic-only: the dispatcher already routed unknown system controls through `_log_system_event`; this just gives them friendly labels and typed enum members. `_3/NI` and `_3/AA` flip `requires_reload=True` since they invalidate the cached nodedef→entity mapping (UDI's taxonomy calls `NI` the primary event for profile-related changes). * SystemEventControl: + `_24` SYSTEM_EDITOR, `_25` ZMATTER_ZWAVE, `_26` SYSTEM_UPGRADE, `_27` ZIGBEE_UYB. Relabel `_18` ZIGBEE and `_21` ZWAVE as the legacy ISY994-era drivers (their IoX-6 successors are `_27` / `_25`). Document `_28`'s Profile-events overlap (defined but never fired per UDI). * NodeLifecycleAction: + `NI` (NODE_TYPE_INFO_CHANGED), `AA` (ALL_NODES_ADDED), `LU` (LINK_UPDATED) with event-info tag rows. * SystemUpgradeAction (`_26`) + SystemEditorAction (`_24`) enums, wired into `_SYSTEM_ACTION_ENUMS` so `describe_system_event` resolves them. * `_25` / `_27` sub-categories aren't modelled — UDI's doc points at a separate `zwave.md` we don't have. They pass through verbatim with the new dotted-action label. Source: UDI subscription-events reference (`UDEvents.h` taxonomy). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Claude finished @shbatm's task in 2m 52s —— View job Code Review
Overall this is a high-quality, well-structured diagnostic/observability PR. The taxonomy additions are correct, thoroughly documented, and the test coverage is comprehensive. A few observations below, mostly minor.
|
Summary
Adds the system-event vocabulary UDI shipped in their
subscription-eventsreference doc (drawn from firmwareUDEvents.h). Pure diagnostic / observability work — the dispatcher already passed unknown system controls through_log_system_event; this gives them friendly labels, typed enum members, and (for_3/NIand_3/AA) the reload-worthy flag they should have had.SystemEventControl: +_24SYSTEM_EDITOR,_25ZMATTER_ZWAVE,_26SYSTEM_UPGRADE,_27ZIGBEE_UYB. Re-label existing_18ZIGBEE /_21ZWAVE as ISY994-era legacy drivers (their IoX-6 successors are_27/_25). Document_28's shared-with-never-fired Profile events caveat.NodeLifecycleAction: +NI(NODE_TYPE_INFO_CHANGED— the primary signal a node's nodedef assignment was reassigned),AA(ALL_NODES_ADDED— bulk include-complete),LU(LINK_UPDATED— scene link's on-level / ramp changed).NI+AAfliprequires_reload=True;LUis a soft signal.SystemUpgradeAction(_26: active / inactive / available / reboot-required) andSystemEditorAction(_24: editor-changed). Both wired into_SYSTEM_ACTION_ENUMSsodescribe_system_eventresolves them in debug logs._25/_27sub-action enums are deliberately deferred — UDI's doc points at a separatezwave.mdwe don't have. They pass through with the new dotted-action label (zmatter_zwave = 1.3etc.).Test plan
pytest— 887 passed, no skipsruff check pyisyox testscleanmypy pyisyoxcleanpre-commit runon all touched files green (incl. pylint, codespell, prettier)test_describe_system_eventcover each new control + action_3/NI,_3/AA,_3/LUdispatcher smoke teststest_lifecycle_requires_reload_taxonomyextended to keep the reload/soft split exhaustive🤖 Generated with Claude Code