# П59 · 2023-01 · Модель угроз — три прохода саморевью ## Рамка пакета - Slug: `editorial-2023-01-practice-threat-model`, `editorial-2023-01-mechanism-threat-model`, `editorial-2023-01-field-threat-model`. - Голос: М6, начало 2023 года. Прагматичный системный практик говорит коротко: один учебный поток данных, asset, trust boundary, abuse, control, evidence и rollback. - Граница: это не security review, pentest, аттестация, аудит соответствия, browser/API run, криптографическая реализация, сканирование, trace или измерение. Fixture создаёт только детерминированные объекты в памяти; все actor/asset/boundary/abuse вручную заданы строками. - Sidecar содержит ровно пять новых файлов: этот review, один upgrade-скрипт и три локальных SVG. Registry, README, `articles.json`, очередь, документация, Git, чужие файлы и прежние месяцы не менялись. ## Проход 1 — факты и техника - Источники перепроверены 31.07.2026 по HTTP 200 и их статусам/датам, исторически они были доступны к январю 2023: [NIST SP 800-154 Initial Public Draft, 14.03.2016](https://csrc.nist.gov/files/pubs/sp/800/154/ipd/docs/sp800_154_draft.pdf), [NIST SP 800-218 SSDF v1.1 Final, 03.02.2022](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-218.pdf) и [NIST SP 800-53 Rev. 5, 2020](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r5.pdf). SP 800-154 везде назван именно initial public draft, не final. - `planTeachingThreatModel()` принимает только явные `actor`, `asset`, `boundary`, `abuse` и один известный `control`; отсутствие asset или boundary и неизвестный control детерминированно отклоняются. Valid branch связывает один control с одним evidence. `rollbackTeachingThreatModel()` восстанавливает лишь snapshot учебной записи и возвращает `assessment: not-performed`. - `runThreatModelFixture()` содержит 13 assertions только о локальной модели: обязательные поля, boundary, связь threat/control/evidence, три отрицательные ветки, отсутствие system assessment/environment observation и предел rollback. Нет assertions о безопасности endpoint, подписи, сети, пользователях или продуктивной системе. ## Проход 2 — голос, полнота и объём - В первых двух абзацах всех трёх статей названы проблема и цена: чек-листовый control без asset/boundary создаёт непроверяемое изменение и опасный откат. Маршрут везде построен как «симптом → причина → проверка → действие». - У каждой статьи есть доступная таблица, исполнимый code/example, упорядоченный маршрут, фигура с содержательными alt/caption, ограничения, rollback и следующий шаг. Слово threat model не подменяет доказательство: рядом названы asset, злоупотребление, control и evidence. - Внутренний revision builder считает основной текст без списка источников и удерживает диапазон 5 000–15 000 знаков. Фактический объём: 7 269 / 8 048 / 7 701 знак; зрелость соответствует 2023 году: системная точность без выдуманного опыта и метрик. ## Проход 3 — визуал, безопасность и выпуск - SVG разделяют роли: DFD-поток, контракт threat/control/evidence и маршрут диагностики/rollback. В них нет `script`, `foreignObject`, внешних URL, `data:image`, пользовательского ввода или интерактивного поведения. Подписи явно отделяют схему от реальной сети, протокола, incident report и deployment. - До интеграции выполнены: `node --check web/scripts/upgrade-2023-01.mjs` — PASS; `node web/scripts/upgrade-2023-01.mjs --verify-fixture` — PASS 13/13; `cd web && npm run audit:draft -- scripts/upgrade-2023-01.mjs` — PASS для всех трёх slug; import-safe export без `date`/`author` — PASS; `xmllint` — PASS; SVG safety scan — PASS; Sharp-review всех SVG на 375 px — PASS. ## Интеграционная приёмка - Ревизии добавлены в `web/data/editorial-revisions.mjs` поверх трёх исходных slug. `web/data/articles.json`, даты и авторы не изменялись; в registry 172 уникальные ревизии без дубликатов. - Строгий аудит `npm run audit:articles -- editorial-2023-01-practice-threat-model editorial-2023-01-mechanism-threat-model editorial-2023-01-field-threat-model` — PASS: у каждой статьи 1 figure, 1 table и 1 code example. - Production-сборка `cd web && npm run build` — PASS: 374 статические страницы. README обновлён с 178/358 до 181/358 принятых материалов; осталось 177.