# Август 2027 — техническая вычитка web security Пакет состоит из трёх самостоятельных материалов: про проверку security headers, измерение Web Vitals и эксплуатационную карточку с rollback. Исторические slug сохранены. В HTML-телах нет редакционных планов, описания автора, внутренних статусов или отчёта о создании текста. ## Проход 1 — факты, пример и источники | Статья | До | После | Правка | |---|---|---|---| | Practice | Карточка решения говорила о «контроле» без конкретного web-объекта. | buildSecurityHeaders возвращает CSP nonce, object-src none, base-uri self и HSTS с явным ограничением первого HTTP-перехода. | Пример проверяет реальные директивы, а не абстрактный статус безопасности. | | Mechanism | Метрики описывались как общий показатель качества страницы. | classifyWebVitals отдельно проверяет LCP, INP и CLS; текст различает field/lab и p75 по сегменту. | Порог не выдаётся за причинность и не смешивается с UX-выводом. | | Field | Runbook был рассуждением о корректирующем процессе. | validateRunbookCard требует symptom, scope, precondition, action, rollback, verification и observable результата. | Инструкция получает проверяемый вход и условие завершения. | Источники проверены как первичные: [CSP Level 3](https://www.w3.org/TR/CSP3/), [RFC 6797 HSTS](https://www.rfc-editor.org/rfc/rfc6797.html), [Web Vitals](https://web.dev/articles/vitals), [W3C Performance Timeline](https://www.w3.org/TR/2025/CRD-performance-timeline-20250521/) и [NIST SP 800-61r2](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-61r2.pdf). В каждой статье отдельно указано, что источник определяет и чего не доказывает о конкретном приложении. ## Проход 2 — структура, голос и проверяемость | Статья | До | После | Правка | |---|---|---|---| | Practice | Заголовок и вступление обещали «безопасность» без симптома. | Первые абзацы называют XSS/downgrade, цену ошибки и маршрут Report-Only → enforce; далее идут карта ресурсов, таблица директив и ограничения. | Открытие отвечает на вопрос читателя и не обещает абсолютную защиту. | | Mechanism | LCP, INP и CLS шли одним списком. | Для каждой метрики добавлены пользовательский вопрос, порог, диагностический разрез и следующий тест. | Короткая речь привязана к действию, а не к каталогу терминов. | | Field | Runbook заканчивался советом «проверить результат». | Добавлены precondition, обратимое действие, rollback, owner-free verification и критерий закрытия. | Команда не считается восстановлением без наблюдаемого результата. | Примеры запускаются над локальными данными и чистыми функциями. В коде нет обращения к сети, файловой системе, секретам, часам или security tooling. Поэтому статьи объясняют механизм и форму проверки, но не выдают fixture за evidence конкретного сервиса. ## Проход 3 — визуал, доступность и выпускная вычитка | Статья | До | После | Правка | |---|---|---|---| | Practice | Граф показывал внутреннюю карту решений. | SVG разделяет CSP и HSTS и ведёт неизвестный ресурс в stop-ветку; title, desc, alt и caption называют границу. | Рисунок объясняет объект защиты. | | Mechanism | Матрица была общей quality rubric. | SVG показывает LCP/INP/CLS, вопрос, порог и диагностический срез на ширине 375 px. | Визуал помогает выбрать следующий замер. | | Field | Петля revision не показывала условие завершения. | SVG ведёт Symptom → Precondition → Action → Verify и отдельно показывает rollback. | Рисунок закрепляет обратимость и проверку результата. | Три SVG прошли XML и safety scan: нет script, foreignObject, javascript:, data:image и event handlers. Sharp-рендер на 375 px проверен визуально: подписи, стрелки и стоп-ветки не обрезаны. В HTML у каждой статьи есть таблица с caption/thead/scope, runnable-пример и ordered route. ## Итоговые проверки - node --check scripts/upgrade-2027-08.mjs — PASS. - node scripts/upgrade-2027-08.mjs --verify-fixture — PASS, 7/7. - npm run audit:draft -- scripts/upgrade-2027-08.mjs — PASS, 3/3 exact slugs. - npm run audit:articles для трёх августовских slug — PASS. - xmllint --noout, SVG safety scan и Sharp 375 px — PASS для трёх assets. - Cross-scan body с включённым code и исключёнными source lists — без 12-словных повторов в общей партии.