tractor/ai/prompt-io/opencode/20260818T193002Z_bf06b4f8_p...

678 B

Repeated teardown sites reconstruct the Actor._contexts registry key from a portal channel and context ID before popping it. Add an idempotent actor-owned helper deriving the key from the context itself, then route caller and callee context teardown through that helper.

git diff HEAD~1..HEAD -- tractor/runtime/_runtime.py tractor/runtime/_rpc.py tractor/_context.py

Keep receive-channel closure and cancellation shielding in each lifecycle owner so the helper centralizes registry machinery without changing their teardown ordering.