V4 lifted `isError` from the tool-result content wrapper onto the message and made the event-level `data.error` identity optional, so a failing result could lose its error flag. The fold now reads the mark from BOTH spellings — surface nodes and file-op rows keep it on every generation.