# config_flow.user_step.exists

> **Generated from `RuleDefinition` metadata.** Edit only the section below the
> "HANDWRITTEN BELOW" marker; everything above is regenerated by
> `hasscheck docs-render`.

## Summary

config_flow.py defines async_step_user

## Why

async_step_user is the standard entry point for Home Assistant config flows initiated by the user from the UI. Without it, users cannot set up this integration from Settings → Devices & Services. Note: this rule uses AST inspection and cannot detect async_step_user that is defined only in a base class, mixin, or via dynamic attribute assignment — those cases will produce a false WARN.

## Status behavior

| Field | Value |
|---|---|
| Category | modern_ha_patterns |
| Severity | recommended |
| Overridable | True |
| Version | 1.0.0 |

## Source

- https://developers.home-assistant.io/docs/config_entries_config_flow_handler/#defining-the-flow
- `source_checked_at`: 2026-05-01

<!-- HANDWRITTEN BELOW THIS LINE -->

## Examples

### Passing

```python
# custom_components/my_sensor/config_flow.py
from homeassistant import config_entries

class MySensorConfigFlow(config_entries.ConfigFlow, domain="my_sensor"):
    async def async_step_user(self, user_input=None):
        ...
```

### Failing / warning

```python
# custom_components/my_sensor/config_flow.py
from homeassistant import config_entries

class MySensorConfigFlow(config_entries.ConfigFlow, domain="my_sensor"):
    # async_step_user is missing — HassCheck reports WARN
    pass
```
