It's tricky. I tried to change it by basically only relying on (Divergin)SearchResult but the issue becomes with having precise error message - the divergent symbol is lost by the time we want to finally report the error message. The only way to recover it is through the context buffer.