05088bf991
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Markus Tuominen <3738613+Markus98@users.noreply.github.com>
179 lines
6.7 KiB
YAML
179 lines
6.7 KiB
YAML
rules:
|
|
# Bronze
|
|
action-setup:
|
|
status: exempt
|
|
comment: This integration does not register any service actions.
|
|
appropriate-polling:
|
|
status: exempt
|
|
comment: |
|
|
This integration is local push (iot_class: local_push). Devices emit
|
|
UDP messages and the integration reacts to them via UDP listener
|
|
callbacks (asyncio DatagramProtocol); there is no polling interval
|
|
to configure.
|
|
brands: done
|
|
common-modules:
|
|
status: todo
|
|
comment: |
|
|
The integration lacks a coordinator module. Device state management and
|
|
dispatcher wiring are handled inline in __init__.py and the platform
|
|
files. A coordinator.py (or equivalent) and cleaner separation of
|
|
concerns would satisfy this rule.
|
|
config-flow-test-coverage: done
|
|
config-flow: done
|
|
dependency-transparency: done
|
|
docs-actions:
|
|
status: exempt
|
|
comment: This integration does not register any service actions.
|
|
docs-high-level-description: done
|
|
docs-installation-instructions: done
|
|
docs-removal-instructions:
|
|
status: todo
|
|
comment: |
|
|
The external documentation page does not include removal/uninstall
|
|
instructions for this integration.
|
|
entity-event-setup: done
|
|
entity-unique-id: done
|
|
has-entity-name: done
|
|
runtime-data: done
|
|
test-before-configure: done
|
|
test-before-setup: done
|
|
unique-config-entry:
|
|
status: todo
|
|
comment: |
|
|
The integration uses _async_current_entries() to abort duplicate
|
|
setup in the config flow, but hassfest requires either
|
|
single_config_entry: true in the manifest or the modern
|
|
_async_abort_entries_match / async_set_unique_id pattern.
|
|
|
|
# Silver
|
|
action-exceptions:
|
|
status: exempt
|
|
comment: This integration does not register any service actions.
|
|
config-entry-unloading: done
|
|
docs-configuration-parameters:
|
|
status: todo
|
|
comment: |
|
|
The external documentation page does not document configuration
|
|
parameters in detail. Basic setup is described but no parameter
|
|
reference table exists.
|
|
docs-installation-parameters:
|
|
status: todo
|
|
comment: |
|
|
The external documentation page does not include detailed installation
|
|
parameter documentation.
|
|
entity-unavailable:
|
|
status: todo
|
|
comment: |
|
|
The integration does not use a DataUpdateCoordinator. Entity availability
|
|
is set per-entity via _attr_available in _async_update_state(), but there
|
|
is no mechanism to mark all entities unavailable when the UDP listener
|
|
fails after initial setup (e.g. network goes away mid-session).
|
|
integration-owner: done
|
|
log-when-unavailable:
|
|
status: todo
|
|
comment: |
|
|
Without a coordinator the integration has no centralised logging when
|
|
the listener becomes unavailable. Individual entities do not log when
|
|
they transition to unavailable. A coordinator would satisfy this
|
|
automatically.
|
|
parallel-updates:
|
|
status: todo
|
|
comment: |
|
|
Neither sensor.py nor event.py define a PARALLEL_UPDATES constant.
|
|
Because these are push-based entities that never poll, PARALLEL_UPDATES
|
|
should be set to 0 in each platform file.
|
|
reauthentication-flow:
|
|
status: exempt
|
|
comment: |
|
|
This integration uses local UDP discovery and requires no credentials,
|
|
so reauthentication is not applicable.
|
|
test-coverage:
|
|
status: todo
|
|
comment: |
|
|
Only config-flow tests exist (tests/components/weatherflow/
|
|
test_config_flow.py). There are no tests for the sensor or event
|
|
platform entities, nor for async_setup_entry / async_unload_entry
|
|
behaviour. Coverage is well below the 95% Silver threshold.
|
|
|
|
# Gold
|
|
devices: done
|
|
diagnostics:
|
|
status: todo
|
|
comment: |
|
|
No diagnostics.py module exists. An async_get_config_entry_diagnostics
|
|
function should be added to aid debugging.
|
|
discovery-update-info:
|
|
status: exempt
|
|
comment: |
|
|
The integration discovers devices via local UDP broadcast. There is no
|
|
network-level discovery protocol (Zeroconf, SSDP, DHCP, etc.) that
|
|
would provide updated device information via the manifest discovery
|
|
keys, so this rule is not applicable.
|
|
discovery:
|
|
status: exempt
|
|
comment: |
|
|
WeatherFlow devices broadcast UDP packets on the local network. The
|
|
integration listens for these packets rather than using HA's discovery
|
|
infrastructure (Zeroconf, SSDP, DHCP). Discovery happens at the
|
|
listener level within the integration itself, not via manifest-declared
|
|
discovery protocols.
|
|
docs-data-update: todo
|
|
docs-examples:
|
|
status: todo
|
|
comment: No automation or dashboard usage examples are present in the docs.
|
|
docs-known-limitations: done
|
|
docs-supported-devices: done
|
|
docs-supported-functions: done
|
|
docs-troubleshooting:
|
|
status: todo
|
|
comment: No troubleshooting section exists in the external documentation.
|
|
docs-use-cases:
|
|
status: todo
|
|
comment: No practical use-case examples are documented.
|
|
dynamic-devices: done
|
|
entity-category: done
|
|
entity-device-class: done
|
|
entity-disabled-by-default: done
|
|
entity-translations: done
|
|
exception-translations:
|
|
status: todo
|
|
comment: |
|
|
The integration does not raise translated HomeAssistantError or
|
|
ServiceValidationError exceptions. Config flow form errors use
|
|
translation keys resolved via strings.json, but those are separate from
|
|
the translated exceptions covered by this rule.
|
|
icon-translations: done
|
|
reconfiguration-flow:
|
|
status: todo
|
|
comment: |
|
|
No async_step_reconfigure step is implemented in config_flow.py.
|
|
Although the integration takes no user-configurable parameters, a
|
|
reconfiguration step may still be expected at Gold level.
|
|
repair-issues:
|
|
status: exempt
|
|
comment: |
|
|
There are no identified scenarios in this integration that require
|
|
directing users to the repair dashboard.
|
|
stale-devices:
|
|
status: todo
|
|
comment: |
|
|
async_remove_config_entry_device is implemented, allowing manual removal
|
|
of devices. However, there is no automated mechanism to detect and clean
|
|
up stale devices (e.g. devices that were seen on a previous run but are
|
|
no longer broadcasting). Full stale-device handling should be added.
|
|
|
|
# Platinum
|
|
async-dependency: done
|
|
inject-websession:
|
|
status: exempt
|
|
comment: |
|
|
pyweatherflowudp communicates via raw UDP sockets (asyncio DatagramProtocol),
|
|
not HTTP. There is no aiohttp.ClientSession involved, so websession
|
|
injection is not applicable.
|
|
strict-typing:
|
|
status: todo
|
|
comment: |
|
|
The integration is not listed in .strict-typing and has not been
|
|
validated under mypy strict mode. Type annotations should be audited
|
|
and the domain added to .strict-typing.
|