pub(crate) fn update_with( root: &AppRoot, edit: impl FnOnce(&mut DocumentMut) -> Result<()>, before_persist: impl FnOnce() -> Result<()>, replace: impl FnOnce(NamedTempFile, &Path) -> Result<()>, ) -> Result<()>