{"record":{"id":"b5572b312ac0f78e","repo":"bytedance/deer-flow","slug":"invalid-metadata-filter-entries-join-bad-en","errorCode":null,"errorMessage":"Invalid metadata filter entries: {', '.join(bad_entries)}","messagePattern":"Invalid metadata filter entries: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":422,"severity":"error","filePath":"backend/app/gateway/routers/threads.py","lineNumber":410,"sourceCode":"    @classmethod\n    def _validate_metadata_filters(cls, v: dict[str, Any]) -> dict[str, Any]:\n        \"\"\"Reject filter entries the SQL backend cannot compile.\n\n        Enforces consistent behaviour across SQL and memory backends.\n        See ``deerflow.persistence.json_compat`` for the shared validators.\n        \"\"\"\n        if not v:\n            return v\n        from deerflow.persistence.json_compat import validate_metadata_filter_key, validate_metadata_filter_value\n\n        bad_entries: list[str] = []\n        for key, value in v.items():\n            if not validate_metadata_filter_key(key):\n                bad_entries.append(f\"{key!r} (unsafe key)\")\n            elif not validate_metadata_filter_value(value):\n                bad_entries.append(f\"{key!r} (unsupported value type {type(value).__name__})\")\n        if bad_entries:\n            raise ValueError(f\"Invalid metadata filter entries: {', '.join(bad_entries)}\")\n        return v\n\n\nclass ThreadStateResponse(_MetadataRedactingResponse):\n    \"\"\"Response model for thread state.\"\"\"\n\n    values: dict[str, Any] = Field(default_factory=dict, description=\"Current channel values\")\n    next: list[str] = Field(default_factory=list, description=\"Next tasks to execute\")\n    metadata: dict[str, Any] = Field(default_factory=dict, description=\"Checkpoint metadata\")\n    checkpoint: dict[str, Any] = Field(default_factory=dict, description=\"Checkpoint info\")\n    checkpoint_id: str | None = Field(default=None, description=\"Current checkpoint ID\")\n    parent_checkpoint_id: str | None = Field(default=None, description=\"Parent checkpoint ID\")\n    created_at: str | None = Field(default=None, description=\"Checkpoint timestamp\")\n    tasks: list[dict[str, Any]] = Field(default_factory=list, description=\"Interrupted task details\")\n\n\nclass ThreadPatchRequest(BaseModel):\n    \"\"\"Request body for patching thread metadata.\"\"\"","sourceCodeStart":392,"sourceCodeEnd":428,"githubUrl":"https://github.com/bytedance/deer-flow/blob/1dd6ba1acb03700589994b0366c5d1c7d05e2eff/backend/app/gateway/routers/threads.py#L392-L428","documentation":"Error \"Invalid metadata filter entries: {', '.join(bad_entries)}\" thrown in bytedance/deer-flow.","triggerScenarios":"Thrown at backend/app/gateway/routers/threads.py:410 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the metadata filter entries to the documented format (valid key=value pairs).","Remove the invalid entries listed in the error and retry."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1dd6ba1acb03700589994b0366c5d1c7d05e2eff","analyzedAt":"2026-08-14T21:20:34.804Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}