{"record":{"id":"dec863b1b55f82a3","repo":"apache/superset","slug":"alert-validator-config-error","errorCode":null,"errorMessage":"Alert validator config error.","messagePattern":"Alert validator config error\\.","errorType":"exception","errorClass":"AlertValidatorConfigError","httpStatus":422,"severity":"error","filePath":"superset/commands/report/alert.py","lineNumber":118,"sourceCode":"        self._report_schedule.last_value = self._result\n        try:\n            config = json.loads(self._report_schedule.validator_config_json)\n            operator = config[\"op\"]\n            threshold = config[\"threshold\"]\n            # Return False for None results to prevent false alert triggers\n            if self._result is None:\n                logger.debug(\n                    \"Alert not triggered (NULL result) for report_schedule_id=%s, \"\n                    \"execution_id=%s, message=%s\",\n                    self._report_schedule.id,\n                    self._execution_id,\n                    self._info_message,\n                )\n                return (False, self._info_message)\n            triggered = OPERATOR_FUNCTIONS[operator](self._result, threshold)\n            return (triggered, None)\n        except (KeyError, json.JSONDecodeError) as ex:\n            raise AlertValidatorConfigError() from ex\n\n    def _validate_not_null(self, rows: np.recarray[Any, Any]) -> None:\n        self._validate_result(rows)\n        value = rows[0][1]\n        # Normalize NULL/NaN to None for consistency with _validate_operator\n        if value is None or pd.isna(value):\n            self._result = None\n            self._info_message = \"Query returned NULL value\"\n            return\n        self._result = value\n\n    @staticmethod\n    def _validate_result(rows: np.recarray[Any, Any]) -> None:\n        # check if query return more than one row\n        if len(rows) > 1:\n            raise AlertQueryMultipleRowsError(\n                message=_(\n                    \"Alert query returned more than one row. %(num_rows)s rows returned\",  # noqa: E501","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/apache/superset/blob/f4587218dd19d046c3e4d00063e7d27f8a2ed354/superset/commands/report/alert.py#L100-L136","documentation":"Error \"Alert validator config error.\" thrown in apache/superset.","triggerScenarios":"An alert is executed with a malformed validator configuration.","commonSituations":"Running an alert whose configured validator name does not match any registered validator.","solutions":["Fix the alert validator configuration in the report schedule (valid JSON, correct operator and threshold).","Review ALERT_REPORTS validator settings in the server configuration."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f4587218dd19d046c3e4d00063e7d27f8a2ed354","analyzedAt":"2026-08-14T22:39:27.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}