now polling for changes returns span and text so that it's possible to edit just the changed region. greatly improved controller internal api with crate-level traits keeping error handling localized