ethers signs only the fields a type declares and drops any other key, but the Message section listed every key the site sent, so an added key read as signed. The Message section now follows the signed type, at every level of nesting and in the type's order. Typed data with other keys is not refused: those keys are listed after the message under "Not part of the signature", by their place in the message. README SignApproval says so. The operator/spender test now also checks the Message section, and new tests cover an added key in a nested struct and in a list item. Model: opus-5-5