@Override
        public Void mapShape(MapShape shape) {
            if (leftValue != null && rightValue != null && leftValue.isObjectNode() && rightValue.isObjectNode()) {
                Map<String, Node> leftValues = leftValue.expectObjectNode().getStringMap();
                Map<String, Node> rightValues = rightValue.expectObjectNode().getStringMap();

                // Look for changed and removed entries.
                for (Map.Entry<String, Node> entry : leftValues.entrySet()) {
                    Node rightValue = rightValues.get(entry.getKey());
                    crawlContents(model,
                            startingShape,
                            trait,
                            shape.getValue(),
                            entry.getValue(),
                            rightValue,
                            events,
                            path + '/' + entry.getKey());
                }

                // Look for added entries.
                for (Map.Entry<String, Node> entry : rightValues.entrySet()) {
                    if (!leftValues.containsKey(entry.getKey())) {
                        crawlContents(model,
                                startingShape,
                                trait,
                                shape.getValue(),
                                null,
                                entry.getValue(),
                                events,
                                path + '/' + entry.getKey());
                    }
                }
            }

            return null;
        }
Traits in this list have special backward compatibility rules and can't be validated here.
smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ModifiedTrait.java