{"record":{"id":"443b29d36d91898c","repo":"MemPalace/mempalace","slug":"remote-event-is-missing-required-field-key-r","errorCode":null,"errorMessage":"remote event is missing required field {key!r}","messagePattern":"remote event is missing required field (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mempalace/logstream.py","lineNumber":861,"sourceCode":"        the arrival cursor — is ours. Referenced artifacts must already be\n        applied (sync pulls artifacts first) so readers never see a dangling\n        id, same invariant as append_event. Returns True if inserted, False\n        if we already had it. Raises ValueError on malformed input or a\n        missing artifact.\n        \"\"\"\n        for key in (\n            \"id\",\n            \"type\",\n            \"stream\",\n            \"room\",\n            \"from_agent\",\n            \"created_at\",\n            \"origin_replica\",\n            \"origin_seq\",\n            \"hlc\",\n        ):\n            if not event.get(key):\n                raise ValueError(f\"remote event is missing required field {key!r}\")\n        if event[\"origin_replica\"] == self.replica_id:\n            return False  # our own op echoed back — by definition already present\n        artifact_ids = list(dict.fromkeys(event.get(\"artifact_ids\") or []))\n        metadata_json = _sanitize_metadata(event.get(\"metadata\"))\n\n        with self._lock:\n            conn = self._conn()\n            with conn:\n                dup = conn.execute(\n                    \"SELECT 1 FROM events WHERE id = ? OR (origin_replica = ? AND origin_seq = ?)\",\n                    (event[\"id\"], event[\"origin_replica\"], event[\"origin_seq\"]),\n                ).fetchone()\n                if dup:\n                    return False\n                for artifact_id in artifact_ids:\n                    found = conn.execute(\n                        \"SELECT 1 FROM artifacts WHERE id = ?\", (artifact_id,)\n                    ).fetchone()","sourceCodeStart":843,"sourceCodeEnd":879,"githubUrl":"https://github.com/MemPalace/mempalace/blob/06cb6987f02610784fefbad4b2bd5d026d164ba6/mempalace/logstream.py#L843-L879","documentation":"Error \"remote event is missing required field {key!r}\" thrown in MemPalace/mempalace.","triggerScenarios":"Thrown at mempalace/logstream.py:861 when the library encounters an invalid state.","commonSituations":"A sync peer sent an event missing a required field (schema mismatch or truncated payload).","solutions":["Reject or re-fetch the malformed event; ensure the peer runs a compatible mempalace version"],"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-15T22:17:37.221Z"}