stateDiagram-v2
[*] --> new : launch_new_connection()
new --> idle : login/auth completed
new --> active : restored from takeover (already linked to client)
idle --> active : assigned to waiting client
idle --> used : idle timeout, needs check_query
active --> idle : released (no reset needed)
active --> tested : released with reset_query
active --> used : released with check_query (deprecated)
active --> being_canceled : cancel request pending
used --> tested : janitor schedules check_query
used --> idle : no check needed
tested --> idle : reset/check query succeeded
being_canceled --> idle : all cancel requests completed
active_cancel --> being_canceled : cancel sent, more cancels pending
active_cancel --> active : replication cancel, relinked to client
new --> [*] : disconnect
idle --> [*] : disconnect / timeout
active --> [*] : disconnect
used --> [*] : disconnect
tested --> [*] : disconnect / check failed
being_canceled --> [*] : disconnect
active_cancel --> [*] : disconnect