{"record":{"id":"84f8d379ec92190b","repo":"MemPalace/mempalace","slug":"path-is-malformed-exc","errorCode":null,"errorMessage":"{path} is malformed: {exc}","messagePattern":"(.+?) is malformed: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mempalace/transport.py","lineNumber":82,"sourceCode":"        return float(os.environ.get(\"MEMPALACE_SYNC_HTTP_TIMEOUT\", \"\") or _HTTP_TIMEOUT_S)\n    except ValueError:\n        return float(_HTTP_TIMEOUT_S)\n\n\ndef load_peers(palace_path: str) -> list[dict]:\n    \"\"\"Read peers.json; [] when absent. Malformed files fail loudly.\n\n    peers.json is TRANSPORT configuration — addressing plus app-layer\n    authorization — which is why it lives on this side of the seam.\n    \"\"\"\n    path = Path(os.path.expanduser(palace_path)) / PEERS_FILENAME\n    if not path.exists():\n        return []\n    try:\n        data = json.loads(path.read_text(encoding=\"utf-8\"))\n        peers = data[\"peers\"]\n    except (ValueError, KeyError, TypeError) as exc:\n        raise ValueError(f\"{path} is malformed: {exc}\") from None\n    if not isinstance(peers, list):\n        raise ValueError(f\"{path}: 'peers' must be a list\")\n    for peer in peers:\n        if not isinstance(peer, dict) or not peer.get(\"url\"):\n            raise ValueError(f\"{path}: every peer needs at least a 'url'\")\n    return peers\n\n\ndef http_request(base_url: str, token: str, path: str, params: dict = None) -> dict:\n    \"\"\"The HTTPS wire primitive: one bearer-authenticated GET, JSON back.\"\"\"\n    url = base_url.rstrip(\"/\") + path\n    if params:\n        url += \"?\" + urllib.parse.urlencode(params)\n    request = urllib.request.Request(url)\n    if token:\n        request.add_header(\"Authorization\", f\"Bearer {token}\")\n    try:\n        with urllib.request.urlopen(request, timeout=_http_timeout_s()) as response:","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/MemPalace/mempalace/blob/06cb6987f02610784fefbad4b2bd5d026d164ba6/mempalace/transport.py#L64-L100","documentation":"Error \"{path} is malformed: {exc}\" thrown in MemPalace/mempalace.","triggerScenarios":"Thrown at mempalace/transport.py:82 when the library encounters an invalid state.","commonSituations":"Transport peers config file is malformed.","solutions":["Fix the peers file so it parses as valid config"],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"06cb6987f02610784fefbad4b2bd5d026d164ba6","analyzedAt":"2026-08-15T03:03:36.213Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}