all controllers use internal mutability so that they can all be put behind Arcs
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