The server-side "these fields changed" signal. A hub tracks each live
subscriber's requirements (entity, id, fields) and principal; changed
re-reads the changed fields a subscriber selects through the entity's own
source, under that subscriber's principal, and streams the patch to it.
Subscribers that select none of the changed fields do no work. Cursors
continue from the cursor each subscriber resumed at, so the client's
duplicate and gap handling is unchanged.
values, when given, are the row's stored values of fields (a declared
write's answer): a field of them the source declares shared is sent as
it is, and only the rest are re-read.
ref may be gone: each subscriber's selection of it is read again, and
one it is no longer there to is sent a deletion. A row deleted for one
writer may only be hidden from them, and still there to others.