mutation observer for patch updates