{"record":{"id":"cf1cb04ff99aa4d4","repo":"HKUDS/nanobot","slug":"tui-release-manifest-is-not-valid-utf-8","errorCode":null,"errorMessage":"TUI release manifest is not valid UTF-8","messagePattern":"TUI release manifest is not valid UTF-8","errorType":"exception","errorClass":"TuiUnavailableError","httpStatus":null,"severity":"error","filePath":"nanobot/cli/tui_launcher.py","lineNumber":310,"sourceCode":"def _release_checksum(raw: bytes, archive_name: str) -> str | None:\n    try:\n        parts = raw.decode(\"utf-8\").split()\n    except UnicodeDecodeError:\n        return None\n    if len(parts) != 2 or parts[1] != archive_name:\n        return None\n    digest = parts[0].lower()\n    if len(digest) != 64 or any(character not in \"0123456789abcdef\" for character in digest):\n        return None\n    return digest\n\n\ndef _release_manifest(raw: bytes, asset: str) -> dict[str, str]:\n    expected_names = set(_release_bundle_names(asset)[:-1])\n    try:\n        lines = raw.decode(\"utf-8\").splitlines()\n    except UnicodeDecodeError as exc:\n        raise TuiUnavailableError(\"TUI release manifest is not valid UTF-8\") from exc\n    checksums: dict[str, str] = {}\n    for line in lines:\n        digest, separator, name = line.partition(\"  \")\n        digest = digest.lower()\n        if (\n            separator != \"  \"\n            or name not in expected_names\n            or name in checksums\n            or len(digest) != 64\n            or any(character not in \"0123456789abcdef\" for character in digest)\n        ):\n            raise TuiUnavailableError(\"TUI release manifest is malformed\")\n        checksums[name] = digest\n    if set(checksums) != expected_names:\n        raise TuiUnavailableError(\"TUI release manifest is incomplete\")\n    return checksums\n\n","sourceCodeStart":292,"sourceCodeEnd":328,"githubUrl":"https://github.com/HKUDS/nanobot/blob/42f37dc4c0e409eac7818a82d165c5f2757bc075/nanobot/cli/tui_launcher.py#L292-L328","documentation":"Error \"TUI release manifest is not valid UTF-8\" thrown in HKUDS/nanobot.","triggerScenarios":"Thrown at nanobot/cli/tui_launcher.py:310 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"42f37dc4c0e409eac7818a82d165c5f2757bc075","analyzedAt":"2026-08-26T00:18:52.276Z","schemaVersion":2},"datasetVersion":"2026-08-26T04:18:47.238Z"}