From b557ec20a72f7fd75564362734fcb56a86d4e209 Mon Sep 17 00:00:00 2001 From: goodboy Date: Wed, 25 Mar 2026 01:36:58 -0400 Subject: [PATCH] Coerce IPC `addr` to `tuple` in `.delete_addr()` `msgpack` deserializes tuples as lists over IPC so the `bidict.inverse.pop()` needs a `tuple`-cast to match registry keys. Regressed-by: 85457cb (`registry_addrs` change) Found-via: `/run-tests` test_stale_entry_is_deleted (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code --- tractor/_runtime.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tractor/_runtime.py b/tractor/_runtime.py index b67c5cda..bacb3172 100644 --- a/tractor/_runtime.py +++ b/tractor/_runtime.py @@ -2044,8 +2044,11 @@ class Arbiter(Actor): self, addr: tuple[str, int|str], ) -> tuple[str, str]|None: + # NOTE: `addr` arrives as a `list` over IPC + # (msgpack deserializes tuples -> lists) so + # coerce to `tuple` for the bidict hash lookup. uid: tuple | None = self._registry.inverse.pop( - addr, + tuple(addr), None, ) if uid: