{"record":{"id":"4f8afe2e625120f8","repo":"rohitg00/ai-engineering-from-scratch","slug":"a-verified-namespace-domain-needs-at-least-two-lab","errorCode":null,"errorMessage":"a verified namespace domain needs at least two labels","messagePattern":"a verified namespace domain needs at least two labels","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/13-tools-and-protocols/30-mcp-registry-supply-chain-and-drift/code/main.py","lineNumber":35,"sourceCode":"\nPROTOCOL_VERSION = \"2026-07-28\"\nPUBLISHER_META_KEY = \"io.modelcontextprotocol.registry/publisher-provided\"\nOFFICIAL_META_KEY = \"io.modelcontextprotocol.registry/official\"\nSERVER_INFO_KEY = \"io.modelcontextprotocol/serverInfo\"\n\n\ndef canonical_json(value: Any) -> str:\n    return json.dumps(value, sort_keys=True, separators=(\",\", \":\"), ensure_ascii=True)\n\n\ndef digest(value: Any) -> str:\n    return hashlib.sha256(canonical_json(value).encode(\"utf-8\")).hexdigest()\n\n\ndef namespace_for_domain(domain: str) -> str:\n    labels = [label.lower() for label in domain.strip().strip(\".\").split(\".\") if label]\n    if len(labels) < 2:\n        raise ValueError(\"a verified namespace domain needs at least two labels\")\n    return \".\".join(reversed(labels))\n\n\ndef namespace_matches(server_name: str, verified_namespace: str) -> bool:\n    prefix, separator, slug = server_name.partition(\"/\")\n    return separator == \"/\" and bool(slug) and prefix == verified_namespace\n\n\ndef normalized_tools(tools: list[dict[str, Any]]) -> list[dict[str, Any]]:\n    return sorted(tools, key=lambda item: (str(item.get(\"name\", \"\")), canonical_json(item)))\n\n\ndef registry_status(api_meta: dict[str, Any]) -> str:\n    official = api_meta.get(OFFICIAL_META_KEY) if isinstance(api_meta, dict) else None\n    return str(official.get(\"status\", \"\")) if isinstance(official, dict) else \"\"\n\n\ndef is_sha256_digest(value: Any) -> bool:","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/13-tools-and-protocols/30-mcp-registry-supply-chain-and-drift/code/main.py#L17-L53","documentation":"Error \"a verified namespace domain needs at least two labels\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/13-tools-and-protocols/30-mcp-registry-supply-chain-and-drift/code/main.py:35 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":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}