angee.parties.signals
Parties-owned signal receivers that keep the derived contact counters honest.
Handle.party (the resolved owner) and Party.handle_count are derived facts the managers/mixin maintain on every supported save path (link / confirm / dismiss / resolve). These receivers cover only the delete-path gap: a raw or cascaded PartyHandle delete and a removed Handle. They do not fire on bulk_create or QuerySet.update() — that class of drift is repaired by the idempotent PartyHandleManager.recount / resolve being callable as a repair pass.
Receivers run under system_context because the derived writes are server-owned bookkeeping that must land even when the triggering write ran under a bare actor.
connect
def connect() -> NoneWire counter-integrity receivers onto every concrete Handle/PartyHandle model.