Files
progcode/editorial/reviews/2023-04-draft.md
T
huncode b78758dd3d
Build and deploy / deploy (push) Successful in 15s
revise April 2023 dependency security articles
2026-07-31 14:29:45 +03:00

38 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# П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.