{"record":{"id":"5ee3160571fad625","repo":"kovidgoyal/kitty","slug":"failed-to-read-data-from-update-check-process-wit","errorCode":null,"errorMessage":"Failed to read data from update check process, with error: {e}","messagePattern":"Failed to read data from update check process, with error: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"kitty/boss.py","lineNumber":3506,"sourceCode":"        if callback is not None:\n            try:\n                callback(exit_status, None)\n            except Exception:\n                import traceback\n\n                traceback.print_exc()\n            return\n\n        update_check_process = self.update_check_process\n        if update_check_process is not None and pid == update_check_process.pid:\n            self.update_check_process = None\n            from .update_check import process_current_release\n\n            try:\n                assert update_check_process.stdout is not None\n                raw = update_check_process.stdout.read().decode('utf-8')\n            except Exception as e:\n                log_error(f'Failed to read data from update check process, with error: {e}')\n            else:\n                try:\n                    process_current_release(raw)\n                except Exception as e:\n                    log_error(f'Failed to process update check data {raw!r}, with error: {e}')\n\n    def show_bad_config_lines(self, bad_lines: Iterable[BadLine], misc_errors: Iterable[str] = ()) -> None:\n\n        def format_bad_line(bad_line: BadLine) -> str:\n            return f'{bad_line.number}:{bad_line.exception} in line: {bad_line.line}\\n'\n\n        groups: dict[str, list[BadLine]] = {}\n        for bl in bad_lines:\n            groups.setdefault(bl.file, []).append(bl)\n        ans: list[str] = []\n        a = ans.append\n        for file in sorted(groups):\n            if file:","sourceCodeStart":3488,"sourceCodeEnd":3524,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/boss.py#L3488-L3524","documentation":"kitty spawns a background process to check for new releases; when reading the child's stdout fails (I/O error, decode failure, child died), kitty logs this and skips the update check. Purely informational.","triggerScenarios":"The update-check subprocess (curl or kitty's downloader) exits abnormally, its stdout pipe breaks, or output is not valid UTF-8; also triggered when update_check_period triggers while offline.","commonSituations":"Offline machine, sandboxed environment blocking the check, or a proxy returning binary garbage.","solutions":["Ignore it — harmless","Set `update_check_period 0` in kitty.conf to disable the check entirely","Check network/proxy settings if you want update checks to work"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"# kitty.conf: disable the update check to avoid the subprocess entirely\n# update_check_period 0","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set update_check_period 0 on offline/locked-down machines","Ignore: the failure is contained and harmless"],"tags":["kitty","update-check","network","subprocess"],"backgroundTag":"subprocess-output-read-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}