{"record":{"id":"87bf6ca34228b26d","repo":"JuliusBrussee/caveman","slug":"runtime-policy-public-key-must-be-a-base64-encoded","errorCode":null,"errorMessage":"runtime_policy public_key must be a base64-encoded 32-byte Ed25519 key","messagePattern":"runtime_policy public_key must be a base64-encoded 32-byte Ed25519 key","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/sdk/python/caveman_cloud/core.py","lineNumber":2233,"sourceCode":"        kill_env: str = _POLICY_KILL_ENV,\n        workflow: str | None = None,\n    ) -> None:\n        self._cave = cave\n        self._workflow = workflow or cave.default_workflow\n        self._kill_env = kill_env\n        self._lock = threading.Lock()\n        self._bundle: dict[str, Any] | None = None\n        self._signed = False\n        self._killed_locally = False\n        # A pinned key makes a signature mandatory. An unparseable pin is a\n        # caller bug, not a runtime condition: it raises here rather than\n        # returning a client that silently rejects every bundle forever\n        # (mirrors the TypeScript constructor, which throws).\n        self._pinned_key: bytes | None = None\n        if public_key is not None:\n            decoded = self._decode_key(public_key)\n            if decoded is None:\n                raise ValueError(\"runtime_policy public_key must be a base64-encoded 32-byte Ed25519 key\")\n            self._pinned_key = decoded\n        self._stop = threading.Event()\n        self._thread: threading.Thread | None = None\n        interval = _policy_number(auto_refresh_seconds)\n        if interval is not None and interval > 0:\n            self._thread = threading.Thread(\n                target=self._auto_refresh,\n                args=(interval,),\n                name=\"caveman-runtime-policy\",\n                daemon=True,\n            )\n            self._thread.start()\n\n    # ── lifecycle ────────────────────────────────────────────────────────────\n\n    def kill(self) -> None:\n        \"\"\"Latch this client onto the baseline path immediately and locally.\n","sourceCodeStart":2215,"sourceCodeEnd":2251,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/packages/sdk/python/caveman_cloud/core.py#L2215-L2251","documentation":"Error \"runtime_policy public_key must be a base64-encoded 32-byte Ed25519 key\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at packages/sdk/python/caveman_cloud/core.py:2233 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set runtime_policy.public_key to a base64-encoded 32-byte Ed25519 public key."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}