From 63a13404df05367a3fc9cf386cde8403a1fd7fd5 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 15 Aug 2026 19:02:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=20=D1=81=D0=BA=D0=B0=D0=BD=D0=B5=D1=80=20=D1=83=D1=8F?= =?UTF-8?q?=D0=B7=D0=B2=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B5=D0=B9=20=D0=B2?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8F=D1=85=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/BACKLOG.md | 1 + tasks/items/npm-deps-vulnerability-scan.md | 45 ++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 tasks/items/npm-deps-vulnerability-scan.md diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index 44a2c3e..5980cc8 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -100,4 +100,5 @@ - [🐞 Закрыть анониму адрес подтверждения почты](items/close-verification-endpoint.md) — Адрес подтверждения почты хранилища открыт без сессии: зная адрес вошедшего, аноним вызывает у сервиса отправку письма — сегодня безвредно, потому что почтового отправителя нет. - [🔬 Судьба рубежа расшифровки, у которого не осталось работы](items/transcribed-stage-without-work.md) — Шаг завершения после убранной доставки только двигает колонку, а рубеж при этом подпадает под сторож застревания: готовая расшифровка платит отдельный захват и час сторожа. - [🔬 Пределы длительности, приходящей из метаданных](items/duration-bounds-from-metadata.md) — Длительность приходит от ffprobe числом и не проверяется ничем: приведение к целому переполняется, а испорченная гистограмма чинится только перезапуском. +- [🧹 Проверять уязвимости в зависимостях приложения](items/npm-deps-vulnerability-scan.md) — Зависимости приложения пришли задачей spa-skeleton, а сканера у них нет: govulncheck смотрит только модули Go. Ни проверки, ни объявленного исключения — непроверенная поверхность, о которой никто не решал - [🔬 Квота по общему размеру загруженного на пользователя](items/per-user-size-quota.md) — Паспорт и security.md запрещают отказы по квоте пользователю, а заметка владельца просит квоту по умолчанию 5 ГБ — открытое противоречие с границей домена, которое владелец решил не разбирать сейчас. diff --git a/tasks/items/npm-deps-vulnerability-scan.md b/tasks/items/npm-deps-vulnerability-scan.md new file mode 100644 index 0000000..a129638 --- /dev/null +++ b/tasks/items/npm-deps-vulnerability-scan.md @@ -0,0 +1,45 @@ +# 🧹 Проверять уязвимости в зависимостях приложения + +- **Тип:** chore +- **Категория:** Очередь — Заведена урожаем ревью и встала в конец машинально: место в плане стройки назначает человек. +- **Зачем:** Зависимости приложения пришли задачей spa-skeleton, а сканера у них нет: govulncheck смотрит только модули Go. Ни проверки, ни объявленного исключения — непроверенная поверхность, о которой никто не решал + +Набор проверок судит уязвимости в зависимостях Go — шаг `vulns`, и судит он +достижимость из кода. У зависимостей приложения такого шага нет: `govulncheck` о +них не знает вовсе, а перечень «чего в гейте намеренно нет» их не называет. То +есть это не объявленный долг, а пробел. + +Находка ревью задачи `spa-skeleton` 2026-08-15; ручной прогон сканера на +сегодняшнем дереве нашёл ноль уязвимостей, поэтому спешки нет — есть отсутствие +правила. + +## Затрагивает + +- `Taskfile.yml` — шаг набора проверок: свой либо расширение `front`; +- `CLAUDE.md`, раздел «Гейт» — состав шагов, словарь кодов исхода и перечень + сетезависимых шагов; +- `docs/conventions/go-linters.md`, «Хранилище, документы, секреты, зависимости» + — строка о том, чем механизирована проверка; +- `web/package.json`, `web/package-lock.json` — источник, по которому судит + сканер. + +## Критерии приёмки + +- Уязвимость в зависимости приложения роняет набор проверок. Оракул — временно + закрепить пакет с известной уязвимостью и увидеть красный шаг. +- Отказ сети и реестра на этом шаге приходит кодом окружения, а красная находка + — кодом дрейфа. Оракул — прогон с пустым кэшем без сети даёт код 3, находка + даёт код 1. +- Шаг не удлиняет обычный прогон заметно. Оракул — замер времени `task gate` до + и после. +- Решение записано там, где его будут искать: либо шаг назван в составе гейта, + либо исключение названо в перечне «чего в гейте намеренно нет» с причиной. + Оракул — чтение `CLAUDE.md`, раздел «Гейт». + +## Рамки + +Разбирать сами уязвимости и обновлять зависимости эта задача не берётся — она +заводит проверку. Выбор между «сканировать» и «объявить исключение» уже сделан +решением владельца от 2026-08-15 в пользу проверки; если сканер окажется шумным +на зависимостях сборки, сузить его до тех, что уезжают в браузер, — правка этой +же задачи, а не повод отказаться от проверки.