Go's error interface has no exported fields, so json.Marshal produced {} for the error message. Converting to string at the addWarning call site preserves the actual error text in the JSON payload.