Skip to content

Home Assistant Quality Scale Audit

This document provides a comprehensive audit of the AutoArm integration against the Home Assistant Integration Quality Scale.

Audit Date: February 2026 Integration Version: 1.0.0 Auditor: Automated analysis

Summary

Tier Done Exempt Todo Total
Bronze 16 3 0 19
Silver 7 4 0 11
Gold 10 7 4 21
Platinum 1 1 1 3
Total 34 15 5 54

Current Tier Achievement: Silver (with most Gold requirements met)

Path to Gold: Complete entity-category, entity-device-class, entity-translations, and icon-translations rules (requires refactoring to entity classes).


Bronze Tier

The Bronze tier represents the baseline standard for all integrations.

Completed Rules

Rule Status Notes
action-setup Done Services registered in async_setup (autoarming.py)
brands Done Brand assets submitted and approved in the HA brands repository
common-modules Done Logic separated into const.py, helpers.py, hass_api.py, calendar.py
config-flow Done UI config flow for alarm panel, calendars, persons, and occupancy defaults
config-flow-test-coverage Done Config flow and options flow covered by tests
dependency-transparency Done All dependencies are standard HA components declared in manifest.json
docs-actions Done Services documented in services.yaml and README
docs-high-level-description Done Clear overview in README.md
docs-installation-instructions Done HACS installation documented
docs-removal-instructions Done Removal instructions in docs/removal.md
entity-event-setup Done Events subscribed in initialize_* methods using proper HA tracking functions
runtime-data Done Uses HassKey[AutoArmData] for typed runtime data storage
test-before-configure Done Config flow validates entity selections; YAML validated via voluptuous
test-before-setup Done Validates config via voluptuous schemas; ConfigEntryNotReady on init failure; raises repair issues for invalid transitions
unique-config-entry Done Unique ID set to domain; _abort_if_unique_id_configured() prevents duplicates

Exempt Rules

Rule Status Reason
appropriate-polling Exempt Event-driven integration; calendar polling is configurable
entity-unique-id Exempt Uses fixed entity IDs for integration-scoped singletons
has-entity-name Exempt Entities created via async_set, not entity classes

Silver Tier

The Silver tier focuses on reliability and robustness.

Completed Rules

Rule Status Notes
action-exceptions Done Service handlers raise HomeAssistantError on failure
config-entry-unloading Done shutdown() method properly cleans up all listeners
docs-configuration-parameters Done Parameters documented in automated_arming.md and examples
entity-unavailable Done Entities initialized to "unavailable" when appropriate
integration-owner Done @jeyrb declared as code owner
log-when-unavailable Done Consistent "AUTOARM" prefix; appropriate log levels
test-coverage Done Test coverage >90% with --cov-fail-under=90 enforced

Exempt Rules

Rule Status Reason
docs-installation-parameters Exempt Config flow parameters are self-descriptive entity selectors
parallel-updates Exempt No parallel device polling
reauthentication-flow Exempt No authentication required

Gold Tier

The Gold tier represents best-in-class user experience.

Completed Rules

Rule Status Notes
diagnostics Done diagnostics.py exposes entry data, options, YAML keys, and armer state
docs-data-update Done Update mechanisms documented (events, polling, manual triggers)
docs-examples Done Example configs in docs/configuration/examples/
docs-known-limitations Done Limitations documented in docs/known_limitations.md
docs-supported-functions Done All features documented in README and automated_arming.md
docs-troubleshooting Done Troubleshooting guide in docs/troubleshooting.md
docs-use-cases Done Use cases illustrated in "Why use alarm control panels?" section
exception-translations Done Issue messages use translation keys with placeholders
reconfiguration-flow Done Options flow allows reconfiguring calendars, persons, occupancy defaults, and no-event mode
repair-issues Done Raises repair issues for invalid transition conditions

Exempt Rules

Rule Status Reason
devices Exempt Orchestrates existing entities; doesn't represent physical devices
discovery Exempt User-configured entities; nothing to discover
discovery-update-info Exempt No discovery
docs-supported-devices Exempt Works with any compatible HA entities
dynamic-devices Exempt No device registry usage
entity-disabled-by-default Exempt All entities are essential
stale-devices Exempt No device registry usage

Todo Rules

Rule Status Action Required
entity-category Todo Add EntityCategory if refactored to entity classes
entity-device-class Todo Add device classes (e.g., diagnostic for initialized sensor)
entity-translations Todo Refactor to use translation keys for entity names
icon-translations Todo Implement icon translations

Platinum Tier

The Platinum tier represents technical excellence.

Completed Rules

Rule Status Notes
async-dependency Done No external dependencies; fully async using HA APIs

Exempt Rules

Rule Status Reason
inject-websession Exempt No external HTTP calls

In Progress

Rule Status Notes
strict-typing In Progress py.typed marker present; some Any types remain due to HA ConfigType patterns

Remaining Work

Gold Tier (requires entity class refactoring)

These four rules all require migrating from hass.states.async_set() to proper HA entity classes:

  1. entity-category: Add EntityCategory.DIAGNOSTIC to status sensors
  2. entity-device-class: Add device classes to binary sensors and sensors
  3. entity-translations: Use translation keys for entity names
  4. icon-translations: Add icon translations

Platinum Tier

  1. strict-typing: Eliminate remaining Any types where possible

Code Quality Notes

Strengths

  • Clean separation of concerns across modules
  • Comprehensive error tracking via failures counter and repair issues
  • Rate limiting prevents arming loops
  • Proper async/await throughout
  • Good test coverage (>90%) for core functionality
  • Consistent logging with "AUTOARM" prefix
  • Support for graceful shutdown and reload
  • Diagnostics support for debugging

Areas for Improvement

  • Some methods in autoarming.py are lengthy and could be refactored
  • A few Any type hints remain that could be more specific
  • Entities use async_set directly rather than entity classes

References