e3eece78c3
Name-level контракт ловил пропажу целой ноды/марки, но не дрейф АТРИБУТОВ внутри вендоренной ноды — класс, из-за которого молча потерялся subpages.recursive. Добавлен атрибутный контракт: для каждой ноды/марки @docmost/editor-ext сравниваются её СОБСТВЕННЫЕ объявленные атрибуты (имена + дефолты, читаются из config.addAttributes) с spec.attrs собранной схемы зеркала. Направление editor-ext -> mirror: зеркало намеренно надмножество (глобальные id/textAlign/indent, нормализация части дефолтов в null), поэтому обратное сравнение — ложный дрейф. Значимый провал — атрибут, который зеркало РОНЯЕТ (имя) или чей дефолт молча меняет. Два blessed вида расхождений вынесены в обоснованные allowlist'ы (highlight.colorName — нет md-формы; image.src/link.internal/pdf.width/height — null-нормализация непереносимых атрибутов), оба со stale-guard, чтобы список не сгнил. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>