Skip to content

Add CONFIG_SCHEMA (clear hassfest warning); fix stale docs URL #38

Add CONFIG_SCHEMA (clear hassfest warning); fix stale docs URL

Add CONFIG_SCHEMA (clear hassfest warning); fix stale docs URL #38

Triggered via pull request July 10, 2026 11:22
@fboundyfboundy
opened #36
Status Success
Total duration 54s
Artifacts –

pr_agent.yaml

on: pull_request_target
Run pr agent on every pull request, respond to user comments
50s
Run pr agent on every pull request, respond to user comments
Fit to window
Zoom out
Zoom in

Annotations

9 warnings
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n======\n\n\nThe PR code diff:\n======\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@\n__new hunk__\n1 \"\"\"The Modbus Integration.\"\"\"\n2 \n3 import asyncio\n4 import logging\n5 from datetime import datetime\n6 \n7 +import homeassistant.helpers.config_validation as cv\n8 import voluptuous as vol\n9 from homeassistant.components.persistent_notification import async_create as pn_create\n10 from homeassistant.config_entries import ConfigEntry\n11 from homeassistant.const import Platform\n\n@@ -45,17 +46,22 @@\n__new hunk__\n46 PROTO_MODBUS_ONLY,\n47 TIME_ENTITIES,\n48 )\n49 from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n50 from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n51 from .inverter_hub import SolisInverterHub\n52 from .modbus_controller import ModbusController\n53 from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n54 \n55 _LOGGER = logging.getLogger(__name__)\n56 \n57 PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n58 \n59 +# This integration is configured only via the config flow (no YAML config). async_setup\n60 +# just registers services, so declare an empty config schema — this silences hassfest's\n61 +# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n62 +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n63 +\n64 SCHEME_HOLDING_REGISTER = vol.Schema(\n65 {\n66 vol.Required(\"address\"): vol.Coerce(int),\n67 vol.Required(\"value\"): vol.Coerce(int),\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@\n__new hunk__\n1 {\n2 \"domain\": \"solisconnect\",\n3 \"name\": \"SolisConnect\",\n4 \"codeowners\": [\n5 \"@fboundy\"\n6 ],\n7 \"config_flow\": true,\n8 \"dependencies\": [],\n9 + \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n10 \"integration_type\": \"device\",\n11 \"iot_class\": \"local_polling\",\n12 \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n13 \"quality_scale\": \"silver\",\n__old hunk__\n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n======\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_handler.py", "path": "/app/pr_agent/algo/ai_handlers/litellm_ai_handler.py"}, "function": "chat_completion", "level": {"icon": "🐞", "name": "DEBUG", "no": 10}, "line": 593, "message": "Prompts", "module": "litellm_ai_handler",
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n======\n\n\nThe PR code diff:\n======\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@\n__new hunk__\n1 \"\"\"The Modbus Integration.\"\"\"\n2 \n3 import asyncio\n4 import logging\n5 from datetime import datetime\n6 \n7 +import homeassistant.helpers.config_validation as cv\n8 import voluptuous as vol\n9 from homeassistant.components.persistent_notification import async_create as pn_create\n10 from homeassistant.config_entries import ConfigEntry\n11 from homeassistant.const import Platform\n\n@@ -45,17 +46,22 @@\n__new hunk__\n46 PROTO_MODBUS_ONLY,\n47 TIME_ENTITIES,\n48 )\n49 from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n50 from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n51 from .inverter_hub import SolisInverterHub\n52 from .modbus_controller import ModbusController\n53 from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n54 \n55 _LOGGER = logging.getLogger(__name__)\n56 \n57 PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n58 \n59 +# This integration is configured only via the config flow (no YAML config). async_setup\n60 +# just registers services, so declare an empty config schema — this silences hassfest's\n61 +# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n62 +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n63 +\n64 SCHEME_HOLDING_REGISTER = vol.Schema(\n65 {\n66 vol.Required(\"address\"): vol.Coerce(int),\n67 vol.Required(\"value\"): vol.Coerce(int),\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@\n__new hunk__\n1 {\n2 \"domain\": \"solisconnect\",\n3 \"name\": \"SolisConnect\",\n4 \"codeowners\": [\n5 \"@fboundy\"\n6 ],\n7 \"config_flow\": true,\n8 \"dependencies\": [],\n9 + \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n10 \"integration_type\": \"device\",\n11 \"iot_class\": \"local_polling\",\n12 \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n13 \"quality_scale\": \"silver\",\n__old hunk__\n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n======\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_handler.py", "path": "/app/pr_agent/algo/ai_handlers/litellm_ai_handler.py"}, "function": "chat_completion", "level": {"icon": "🐞", "name": "DEBUG", "no": 10}, "line": 593, "message": "Prompts", "module": "litellm_ai_handler",
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n======\n\n\nThe PR code diff:\n======\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@\n__new hunk__\n1 \"\"\"The Modbus Integration.\"\"\"\n2 \n3 import asyncio\n4 import logging\n5 from datetime import datetime\n6 \n7 +import homeassistant.helpers.config_validation as cv\n8 import voluptuous as vol\n9 from homeassistant.components.persistent_notification import async_create as pn_create\n10 from homeassistant.config_entries import ConfigEntry\n11 from homeassistant.const import Platform\n\n@@ -45,17 +46,22 @@\n__new hunk__\n46 PROTO_MODBUS_ONLY,\n47 TIME_ENTITIES,\n48 )\n49 from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n50 from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n51 from .inverter_hub import SolisInverterHub\n52 from .modbus_controller import ModbusController\n53 from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n54 \n55 _LOGGER = logging.getLogger(__name__)\n56 \n57 PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n58 \n59 +# This integration is configured only via the config flow (no YAML config). async_setup\n60 +# just registers services, so declare an empty config schema — this silences hassfest's\n61 +# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n62 +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n63 +\n64 SCHEME_HOLDING_REGISTER = vol.Schema(\n65 {\n66 vol.Required(\"address\"): vol.Coerce(int),\n67 vol.Required(\"value\"): vol.Coerce(int),\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@\n__new hunk__\n1 {\n2 \"domain\": \"solisconnect\",\n3 \"name\": \"SolisConnect\",\n4 \"codeowners\": [\n5 \"@fboundy\"\n6 ],\n7 \"config_flow\": true,\n8 \"dependencies\": [],\n9 + \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n10 \"integration_type\": \"device\",\n11 \"iot_class\": \"local_polling\",\n12 \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n13 \"quality_scale\": \"silver\",\n__old hunk__\n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n======\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_handler.py", "path": "/app/pr_agent/algo/ai_handlers/litellm_ai_handler.py"}, "function": "chat_completion", "level": {"icon": "🐞", "name": "DEBUG", "no": 10}, "line": 593, "message": "Prompts", "module": "litellm_ai_handler",
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n======\n\n\nThe PR code diff:\n======\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@\n__new hunk__\n1 \"\"\"The Modbus Integration.\"\"\"\n2 \n3 import asyncio\n4 import logging\n5 from datetime import datetime\n6 \n7 +import homeassistant.helpers.config_validation as cv\n8 import voluptuous as vol\n9 from homeassistant.components.persistent_notification import async_create as pn_create\n10 from homeassistant.config_entries import ConfigEntry\n11 from homeassistant.const import Platform\n\n@@ -45,17 +46,22 @@\n__new hunk__\n46 PROTO_MODBUS_ONLY,\n47 TIME_ENTITIES,\n48 )\n49 from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n50 from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n51 from .inverter_hub import SolisInverterHub\n52 from .modbus_controller import ModbusController\n53 from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n54 \n55 _LOGGER = logging.getLogger(__name__)\n56 \n57 PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n58 \n59 +# This integration is configured only via the config flow (no YAML config). async_setup\n60 +# just registers services, so declare an empty config schema — this silences hassfest's\n61 +# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n62 +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n63 +\n64 SCHEME_HOLDING_REGISTER = vol.Schema(\n65 {\n66 vol.Required(\"address\"): vol.Coerce(int),\n67 vol.Required(\"value\"): vol.Coerce(int),\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@\n__new hunk__\n1 {\n2 \"domain\": \"solisconnect\",\n3 \"name\": \"SolisConnect\",\n4 \"codeowners\": [\n5 \"@fboundy\"\n6 ],\n7 \"config_flow\": true,\n8 \"dependencies\": [],\n9 + \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n10 \"integration_type\": \"device\",\n11 \"iot_class\": \"local_polling\",\n12 \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n13 \"quality_scale\": \"silver\",\n__old hunk__\n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n======\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_handler.py", "path": "/app/pr_agent/algo/ai_handlers/litellm_ai_handler.py"}, "function": "chat_completion", "level": {"icon": "🐞", "name": "DEBUG", "no": 10}, "line": 593, "message": "Prompts", "module": "litellm_ai_handler",
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n=====\n\nBranch: 'patch'\n\nCommit messages:\n=====\n1. Add CONFIG_SCHEMA to silence hassfest warning; fix stale docs URL\n\nhassfest emits a CONFIG_SCHEMA warning because the integration defines\nasync_setup (to register services) without declaring a config schema.\nThe integration is config-entry only and consumes no YAML config, so\ndeclare CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN).\nThis clears the yellow hassfest annotation.\n\nAlso repoint the manifest 'documentation' field from the dead\nsolisconnect.readthedocs.io to the published GitHub Pages docs.\n=====\n\n\nThe PR Git Diff:\n=====\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@ \n \"\"\"The Modbus Integration.\"\"\"\n \n import asyncio\n import logging\n from datetime import datetime\n \n+import homeassistant.helpers.config_validation as cv\n import voluptuous as vol\n from homeassistant.components.persistent_notification import async_create as pn_create\n from homeassistant.config_entries import ConfigEntry\n from homeassistant.const import Platform\n\n\n@@ -45,17 +46,22 @@ \n PROTO_MODBUS_ONLY,\n TIME_ENTITIES,\n )\n from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n from .inverter_hub import SolisInverterHub\n from .modbus_controller import ModbusController\n from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n \n _LOGGER = logging.getLogger(__name__)\n \n PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n \n+# This integration is configured only via the config flow (no YAML config). async_setup\n+# just registers services, so declare an empty config schema — this silences hassfest's\n+# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n+CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n+\n SCHEME_HOLDING_REGISTER = vol.Schema(\n {\n vol.Required(\"address\"): vol.Coerce(int),\n vol.Required(\"value\"): vol.Coerce(int),\n\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@ \n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n+ \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n=====\n\nNote that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions, and ' ' (a space) for unchanged lines.\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_ha
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n=====\n\nBranch: 'patch'\n\nCommit messages:\n=====\n1. Add CONFIG_SCHEMA to silence hassfest warning; fix stale docs URL\n\nhassfest emits a CONFIG_SCHEMA warning because the integration defines\nasync_setup (to register services) without declaring a config schema.\nThe integration is config-entry only and consumes no YAML config, so\ndeclare CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN).\nThis clears the yellow hassfest annotation.\n\nAlso repoint the manifest 'documentation' field from the dead\nsolisconnect.readthedocs.io to the published GitHub Pages docs.\n=====\n\n\nThe PR Git Diff:\n=====\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@ \n \"\"\"The Modbus Integration.\"\"\"\n \n import asyncio\n import logging\n from datetime import datetime\n \n+import homeassistant.helpers.config_validation as cv\n import voluptuous as vol\n from homeassistant.components.persistent_notification import async_create as pn_create\n from homeassistant.config_entries import ConfigEntry\n from homeassistant.const import Platform\n\n\n@@ -45,17 +46,22 @@ \n PROTO_MODBUS_ONLY,\n TIME_ENTITIES,\n )\n from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n from .inverter_hub import SolisInverterHub\n from .modbus_controller import ModbusController\n from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n \n _LOGGER = logging.getLogger(__name__)\n \n PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n \n+# This integration is configured only via the config flow (no YAML config). async_setup\n+# just registers services, so declare an empty config schema — this silences hassfest's\n+# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n+CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n+\n SCHEME_HOLDING_REGISTER = vol.Schema(\n {\n vol.Required(\"address\"): vol.Coerce(int),\n vol.Required(\"value\"): vol.Coerce(int),\n\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@ \n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n+ \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n=====\n\nNote that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions, and ' ' (a space) for unchanged lines.\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_ha
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n=====\n\nBranch: 'patch'\n\nCommit messages:\n=====\n1. Add CONFIG_SCHEMA to silence hassfest warning; fix stale docs URL\n\nhassfest emits a CONFIG_SCHEMA warning because the integration defines\nasync_setup (to register services) without declaring a config schema.\nThe integration is config-entry only and consumes no YAML config, so\ndeclare CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN).\nThis clears the yellow hassfest annotation.\n\nAlso repoint the manifest 'documentation' field from the dead\nsolisconnect.readthedocs.io to the published GitHub Pages docs.\n=====\n\n\nThe PR Git Diff:\n=====\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@ \n \"\"\"The Modbus Integration.\"\"\"\n \n import asyncio\n import logging\n from datetime import datetime\n \n+import homeassistant.helpers.config_validation as cv\n import voluptuous as vol\n from homeassistant.components.persistent_notification import async_create as pn_create\n from homeassistant.config_entries import ConfigEntry\n from homeassistant.const import Platform\n\n\n@@ -45,17 +46,22 @@ \n PROTO_MODBUS_ONLY,\n TIME_ENTITIES,\n )\n from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n from .inverter_hub import SolisInverterHub\n from .modbus_controller import ModbusController\n from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n \n _LOGGER = logging.getLogger(__name__)\n \n PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n \n+# This integration is configured only via the config flow (no YAML config). async_setup\n+# just registers services, so declare an empty config schema — this silences hassfest's\n+# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n+CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n+\n SCHEME_HOLDING_REGISTER = vol.Schema(\n {\n vol.Required(\"address\"): vol.Coerce(int),\n vol.Required(\"value\"): vol.Coerce(int),\n\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@ \n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n+ \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n=====\n\nNote that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions, and ' ' (a space) for unchanged lines.\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_ha
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[WARNING] [CONFIG_SCHEMA] Integrations which implement 'async_setup' or 'setup'\nmust define either 'CONFIG_SCHEMA', 'PLATFORM_SCHEMA' or 'PLATFORM_SCHEMA_BASE'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nThe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. It's config-entry only and consumes no YAML config, so this adds:\n\n```python\nCONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n```\n\nwhich clears the warning and formally asserts the integration takes no YAML configuration.\n\nAlso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published GitHub Pages docs (`https://fboundy.github.io/solisconnect/`), matching the README fix from #34.\n\n## Test plan\n- [x] Full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean\n=====\n\nBranch: 'patch'\n\nCommit messages:\n=====\n1. Add CONFIG_SCHEMA to silence hassfest warning; fix stale docs URL\n\nhassfest emits a CONFIG_SCHEMA warning because the integration defines\nasync_setup (to register services) without declaring a config schema.\nThe integration is config-entry only and consumes no YAML config, so\ndeclare CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN).\nThis clears the yellow hassfest annotation.\n\nAlso repoint the manifest 'documentation' field from the dead\nsolisconnect.readthedocs.io to the published GitHub Pages docs.\n=====\n\n\nThe PR Git Diff:\n=====\n## File: 'custom_components/solisconnect/__init__.py'\n\n@@ -1,10 +1,11 @@ \n \"\"\"The Modbus Integration.\"\"\"\n \n import asyncio\n import logging\n from datetime import datetime\n \n+import homeassistant.helpers.config_validation as cv\n import voluptuous as vol\n from homeassistant.components.persistent_notification import async_create as pn_create\n from homeassistant.config_entries import ConfigEntry\n from homeassistant.const import Platform\n\n\n@@ -45,17 +46,22 @@ \n PROTO_MODBUS_ONLY,\n TIME_ENTITIES,\n )\n from .data.solis_config import SOLIS_INVERTERS, InverterConfig, InverterType, inverter_options_from_config\n from .helpers import get_controller, redact_config, remove_entities_for_controller, set_controller, unique_id_generator\n from .inverter_hub import SolisInverterHub\n from .modbus_controller import ModbusController\n from .sensors.solis_base_sensor import SolisBaseSensor, SolisSensorGroup\n \n _LOGGER = logging.getLogger(__name__)\n \n PLATFORMS = [Platform.NUMBER, Platform.SWITCH, Platform.BINARY_SENSOR, Platform.TIME, Platform.SELECT]\n \n+# This integration is configured only via the config flow (no YAML config). async_setup\n+# just registers services, so declare an empty config schema — this silences hassfest's\n+# CONFIG_SCHEMA warning and asserts the integration takes no YAML configuration.\n+CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)\n+\n SCHEME_HOLDING_REGISTER = vol.Schema(\n {\n vol.Required(\"address\"): vol.Coerce(int),\n vol.Required(\"value\"): vol.Coerce(int),\n\n\n\n## File: 'custom_components/solisconnect/manifest.json'\n\n@@ -1,13 +1,13 @@ \n {\n \"domain\": \"solisconnect\",\n \"name\": \"SolisConnect\",\n \"codeowners\": [\n \"@fboundy\"\n ],\n \"config_flow\": true,\n \"dependencies\": [],\n- \"documentation\": \"https://solisconnect.readthedocs.io\",\n+ \"documentation\": \"https://fboundy.github.io/solisconnect/\",\n \"integration_type\": \"device\",\n \"iot_class\": \"local_polling\",\n \"issue_tracker\": \"https://github.com/fboundy/solisconnect/issues\",\n \"quality_scale\": \"silver\",\n=====\n\nNote that lines in the diff body are prefixed with a symbol that represents the type of change: '-' for deletions, '+' for additions, and ' ' (a space) for unchanged lines.\n\n\nResponse (should be a valid YAML, and nothing else):\n```yaml"}}, "file": {"name": "litellm_ai_ha
Run pr agent on every pull request, respond to user comments
`** that reads as a failure:\n\n```\n[warning] [config_schema] integrations which implement 'async_setup' or 'setup'\nmust define either 'config_schema', 'platform_schema' or 'platform_schema_base'.\n... cv.config_entry_only_config_schema can be used.\n```\n\nthe integration defines `async_setup` (to register the `solis_write_holding_register` / `solis_write_time` services) but declares no config schema. it's config-entry only and consumes no yaml config, so this adds:\n\n```python\nconfig_schema = cv.config_entry_only_config_schema(domain)\n```\n\nwhich clears the warning and formally asserts the integration takes no yaml configuration.\n\nalso repoints the manifest `documentation` field from the dead `solisconnect.readthedocs.io` to the published github pages docs (`https://fboundy.github.io/solisconnect/`), matching the readme fix from #34.\n\n## test plan\n- [x] full suite: 362 passed (setup/services included — `config_entry_only_config_schema` doesn't break config-entry setup)\n- [x] `ruff check` / `ruff format --check` clean"}, "file": {"name": "git_provider.py", "path": "/app/pr_agent/git_providers/git_provider.py"}, "function": "get_user_description", "level": {"icon": "🐞", "name": "DEBUG", "no": 10}, "line": 271, "message": "Existing description", "module": "git_provider", "name": "pr_agent.git_providers.git_provider", "process": {"id": 7, "name": "MainProcess"}, "thread": {"id": 140456938480448, "name": "MainThread"}, "time": {"repr": "2026-07-10 11:22:37.874443+00:00", "timestamp": 1783682557.874443}}}