revise April 2023 dependency security articles
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 14:29:45 +03:00
parent 31ed7053e7
commit b78758dd3d
7 changed files with 668 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 181 из 358 созданных материалов. Остальные 177 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 184 из 358 созданных материалов. Остальные 174 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+37
View File
@@ -0,0 +1,37 @@
# П62 · 2023-04 · Безопасность зависимостей — три прохода саморевью
## Рамка партии
- Slug: `editorial-2023-04-practice-dependency-security`, `editorial-2023-04-mechanism-dependency-security`, `editorial-2023-04-field-dependency-security`.
- Голос: М6, апрель 2023. Системный практик начинает с наблюдаемой цены update, различает границы артефактов и оставляет короткий проверяемый маршрут без выдуманного incident report или метрик.
- Три материала не повторяют друг друга: практический triage advisory и достижимости; механизм manifest/lockfile/SBOM/runtime; полевой gate безопасного update и rollback.
- Sidecar создаёт ровно пять файлов: этот review, `web/scripts/upgrade-2023-04.mjs` и три SVG с префиксом `dependency-security-2023-`. Скрипт не пишет `articles.json`, registry, README, очередь или Git.
- Единственный fixture input помечен `synthetic-dependency-security-input-v1`. `SYNTHETIC-ADVISORY-001`, demo package names, versions, lockfile, SBOM, path и runtime labels — учебные значения; они не получены из scanner, CVE, registry, production lockfile, SBOM, trace или запуска приложения.
## Проход 1 — факты и модель
- Источники сверены 31.07.2026 по первичным или официальным страницам и их историческим датам, все существовали не позднее апреля 2023. Для triage используются [GitHub Advisory Database, 14.11.2019](https://github.blog/changelog/2019-11-14-github-advisory-database/), [NTIA Minimum Elements for an SBOM, 12.07.2021](https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom) и [NIST SP 800-218 SSDF v1.1 Final, 03.02.2022](https://doi.org/10.6028/NIST.SP.800-218). Для модели добавлены [npm Docs v7.24.2 package-lock.json, 22.09.2021](https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json/), [SPDX Specification 2.3.0, 2022](https://spdx.github.io/spdx-spec/v2.3/conformance/) и [npm Docs v8.19.4 npm ci / package.json, 26.10.2022](https://docs.npmjs.com/cli/v8/commands/npm-ci/). Источники везде названы рамкой или описанием формата, а не подтверждением состояния конкретного сервиса.
- Перепроверена модель утверждений: advisory остаётся внешним сигналом; lockfile — synthetic resolved tree; SBOM — synthetic inventory record; supplied path — hypothesis для review. Ни один слой не назван доказательством CVE, exploitability, фактической загрузки модуля или production impact.
- `triageSyntheticAdvisory()` сопоставляет только заданные package/version strings и возвращает `vulnerabilityStatus: not-determined-by-fixture`; достижимость всегда `not-assessed-by-fixture`. `buildSyntheticInventory()` намеренно оставляет runtime как `not-observed-by-fixture` и deployment inventory как `not-proven-by-fixture`.
- `planSyntheticSafeUpdate()` требует явный synthetic project contract, сравнивает только labels, хранит named gates как synthetic declarations и всегда отдаёт `compatibility` и `safety` в состоянии `not-proven-by-fixture`. `rollbackSyntheticSafeUpdate()` возвращает лишь version label и не заявляет deployment effect. В fixture есть 22 assertions, включая invalid kind, malformed inventory, отсутствующий package/project contract, неполный gate и неверный candidate; отсутствуют scanner, network, installer, test runner, package download и runtime execution.
## Проход 2 — язык, полнота и объём
- В первых двух абзацах каждой статьи названы исходная проблема и цена: ложная аварийность или непросмотренный риск для advisory; неверное смешение manifest, lockfile и inventory; риск resolver/runtime regressions при update. После этого текст идёт по порядку «симптом → причина → проверка → действие».
- У каждой статьи есть доступная таблица, воспроизводимый code/fixture, упорядоченный маршрут, SVG с содержательными `alt` и `figcaption`, отдельный раздел ограничения модели и минимум три официальных или первичных источника. Practical article не повторяет механизм, а field article не выдаёт named gates за результаты их исполнения.
- `npm run audit:draft -- scripts/upgrade-2023-04.mjs` измерил основной текст без списка источников: practice — 8 613 знаков, mechanism — 8 592, field — 9 048. Все три значения находятся в заданном диапазоне 8–11 тыс. и в общем стандарте 5–15 тыс.
- Редакционный проход удалил общий язык и анахронизмы: нет неназванных измерений, «универсального» процесса, fabricated scanner result, CVE, runtime PASS или обещания, что обновление автоматически безопасно. М6 использует точные объекты: package@version, commit, artifact identity, gate, environment, evidence и rollback condition.
## Проход 3 — SVG, безопасность и выпуск
- Три SVG разделяют роли: `advisory-triage` показывает входной сигнал, lockfile/SBOM и вопрос достижимости; `lockfile-sbom` — четыре границы данных; `safe-update-gate` — evidence gates и отдельный rollback. Подписи и `alt` прямо говорят, что это схемы synthetic процесса, а не scanner report или production trace.
- `xmllint --noout` принял все три SVG. Safety scan не обнаружил `script`, `foreignObject`, inline handlers, внешние `href/src`, `url(http...)` или `data:` assets. Файлы не содержат пользовательского ввода, интерактивного поведения или raster embedded content.
- Sharp отрендерил SVG на ширине 375 px: 375×396, 375×411 и 375×417 px. Ручной просмотр PNG подтвердил читаемость заголовков, шагов, стрелок и нижних подписей; обрезанных labels и перекрытий нет.
- Выпускной проход подтверждает только sidecar: `node --check` — PASS; fixture — PASS 22/22; draft audit — PASS; import-safe export содержит ровно три revision, CLI JSON совпадает с import и нет полей `date`/`author`; XML, safety scan и Sharp-review — PASS. Registry, README, `articles.json`, очередь, документация, Git, commit и push не затрагивались.
## Интеграционная приёмка
- Основной редактор добавил явный reject для malformed inventory и отсутствующего project contract: валидный по advisory input больше не может завершиться исключением. Титулы npm-источников уточнены до legacy-версий v7.24.2 (22.09.2021) и v8.19.4 (26.10.2022). После исправлений fixture — PASS 22/22.
- Ревизии добавлены в `web/data/editorial-revisions.mjs` поверх трёх исходных slug. `web/data/articles.json`, даты и авторы не изменялись; в registry 175 уникальных ревизий без дубликатов.
- Строгий аудит `npm run audit:articles -- editorial-2023-04-practice-dependency-security editorial-2023-04-mechanism-dependency-security editorial-2023-04-field-dependency-security` — PASS: у каждой статьи 1 figure, 1 table и 1 code example.
- Production-сборка `cd web && npm run build` — PASS: 374 статические страницы. README обновлён с 181/358 до 184/358 принятых материалов; осталось 174.