[P0] 08.frontend. Проверить frontend secrets и dependency risks #4

Closed
opened 2026-09-13 15:34:03 +03:00 by codex-bot · 1 comment
Owner

Источник: локальный todo/wealthledger-engineering-improvements.md, пункт 08.frontend, анализ от 13.09.2026. Исходные критерии приведены ниже, чтобы issue не зависела от наличия локального TODO.

Что осталось сделать

08.frontend. Проверить frontend secrets и dependency risks. Часть 08.root.

Готово, когда: история/изменения и runtime/dev dependencies проверены,
baseline привязан к revision, прежние решения WL-P2-12 учтены;
новые secrets/advisories обрабатываются в CI без вывода секретов.
До публикации или production-доступов — P0.

Gitea API возвращает private=false для всех пяти репозиториев. Условие повышения security baseline до P0 по исходному плану применимо; доступность кода без авторизации отдельно не проверена. Не публиковать найденные значения секретов.

Основание текущего статуса

package.json содержит полный verify и отдельные openapi:generate/openapi:check. Генерация типов читает локальный snapshot; единого экспорта runtime OpenAPI с согласованным обновлением двух файлов пока нет. Node 24 уже принят.

Проверка 13.09.2026: статическая сверка текущих файлов и remediation registry; через MCP проверены репозитории, issues, ветки и Actions workflows. Все пять main-веток имеют protected=false, список workflows пуст, существующих issues не найдено. Внешние CI, server-side updater, история секретов и свежий npm audit этой сверкой не проверялись; полные application gates повторно не запускались.

Проверяемая revision frontend: 117e74cdfc29cbf63f549ea88e8106ab25300541.

Remediation registry остаётся владельцем статусов audit findings. Создание issue не означает выполнение или изменение статуса finding. Закрыть после проверки критериев и ссылки на фактические результаты.

Связанные issues

<!-- wealthledger-engineering-improvements:frontend:08.frontend --> Источник: локальный `todo/wealthledger-engineering-improvements.md`, пункт 08.frontend, анализ от 13.09.2026. Исходные критерии приведены ниже, чтобы issue не зависела от наличия локального TODO. ## Что осталось сделать **08.frontend. Проверить frontend secrets и dependency risks.** Часть 08.root. **Готово, когда:** история/изменения и runtime/dev dependencies проверены, baseline привязан к revision, прежние решения `WL-P2-12` учтены; новые secrets/advisories обрабатываются в CI без вывода секретов. До публикации или production-доступов — P0. Gitea API возвращает private=false для всех пяти репозиториев. Условие повышения security baseline до P0 по исходному плану применимо; доступность кода без авторизации отдельно не проверена. Не публиковать найденные значения секретов. ## Основание текущего статуса [package.json](https://git.personal.ksv741.ru/WealthLedger/frontend/src/commit/117e74cdfc29cbf63f549ea88e8106ab25300541/package.json) содержит полный verify и отдельные openapi:generate/openapi:check. Генерация типов читает локальный snapshot; единого экспорта runtime OpenAPI с согласованным обновлением двух файлов пока нет. Node 24 уже принят. Проверка 13.09.2026: статическая сверка текущих файлов и remediation registry; через MCP проверены репозитории, issues, ветки и Actions workflows. Все пять main-веток имеют protected=false, список workflows пуст, существующих issues не найдено. Внешние CI, server-side updater, история секретов и свежий npm audit этой сверкой не проверялись; полные application gates повторно не запускались. Проверяемая revision frontend: `117e74cdfc29cbf63f549ea88e8106ab25300541`. [Remediation registry](https://git.personal.ksv741.ru/WealthLedger/docs/src/commit/7bc8792b9853768734066c31a323b70886d73a23/development/audit-remediation.md) остаётся владельцем статусов audit findings. Создание issue не означает выполнение или изменение статуса finding. Закрыть после проверки критериев и ссылки на фактические результаты. ## Связанные issues - [main: [P0] 08.root. Получить проверенный security/dependency baseline и включить регулярные проверки](https://git.personal.ksv741.ru/WealthLedger/main/issues/5)
Author
Owner

Выполнено 13.09.2026, revision 3be6e61b8fc85d4b16199dbe9910b38894159cb8 (commit).

Dependencies

  • На исходной revision 7a89356 свежий npm audit выявил 3 high affected-package entries: fast-uri, js-yaml и зависимый @redocly/openapi-core (5 distinct advisories).
  • Исправлено lockfile-обновлением: fast-uri 3.1.5 → 3.1.7, js-yaml 4.3.1 → 4.3.2, @redocly/openapi-core 1.34.19 → 1.34.20.
  • После чистого npm ci: npm audit --include=dev --audit-level=low --json и npm audit --omit=dev --json — 0 vulnerabilities, exit 0; npm ls --all --json — exit 0. Все 45 direct dependencies используют exact versions; manifest соответствует lockfile.
  • SHA256 package-lock.json: cee708f94d6bbd4ce6937ff83de6f537f60047105e03b45dc365d1b968b0e47d.
  • WL-P2-12 учтён: прежний React Router fix сохранён; accepted Prisma tooling risk относится только к backend, новых frontend security exceptions нет.
  • По согласованному расширению scope #9 обновлены 8 major-групп: Babel 8, jest-dom 7, jsdom 30, lint-staged 17, react-i18next 17, React Router 8, Zod 4, Vitest/coverage 5. Выполнена миграция Zod error callbacks без изменения правил валидации и локализованных сообщений. TypeScript остаётся 5.9.3: последний openapi-typescript 7.13.0 требует peer ^5.x; совместимого обновления генератора пока нет. Ограничение и review trigger записаны в README. Dependency Dashboard #9 остаётся постоянным dashboard.

Secrets

  • Gitleaks 8.30.1: gitleaks git --log-opts=--all --redact=100 --no-banner — 93 commits, no leaks found, exit 0. Repository не shallow; scope — все локально доступные refs, без обещания проверки удалённых/unreachable объектов.
  • Исходное текущее дерево (324 файла, включая hidden/local config; без .git/node_modules/build/coverage outputs) отдельно проверено gitleaks dir с полной редакцией — no findings. Последующие изменения проверены Gitleaks в реальном pre-commit и повторным history scan итогового commit. Рабочее дерево после commit чистое.
  • В .husky/pre-commit первым шагом добавлен gitleaks git --pre-commit --staged --redact=100 --no-banner; secret finding и отсутствие инструмента блокируют commit.
  • node --test scripts/test-pre-commit.mjs проверяет чистый index при unstaged-секрете, блокировку staged-секрета до downstream hooks, отсутствие значения в выводе и блокировку без Gitleaks. Synthetic token создаётся в памяти; реальные секреты не используются.
  • Сканирование секретов локальное. npm audit обращается к npm registry с dependency metadata; исходники и значения секретов не отправляются.

CI / verification

  • Существующий Frontend verify сохраняет npm ci → npm run verify.
  • Новый Frontend security работает на push/pull_request и ежедневно: полный checkout history, pinned Gitleaks 8.30.1 с SHA256-проверкой архива, regression test pre-commit, blocking npm audit runtime+dev (любой severity).
  • Локально Node 24.21.0 через nvm use --silent: npm ci, KNIP_DISABLE_RAW_TRANSFER=1 npm run verify — PASS: OpenAPI snapshot check, TypeScript, Biome, 46 files / 268 tests, coverage 90.45% statements / 81.44% branches / 85.78% functions / 91.22% lines, Knip, FSD checks, application/Storybook builds. git diff --check — PASS.
  • Gitea security run 13 — success на указанной revision.
  • Gitea verify run 14 — success на той же revision.

Критерии #4 выполнены. ADR 014 сохранён: frontend доверяет предоставленному OpenAPI snapshot; backend checkout/SHA/runtime OpenAPI checks не добавлялись. Branch protection/required checks остаются отдельной #2. Предупреждения Renovate об отсутствии GitHub token для metadata/release notes не требуют добавления секретов в репозиторий и не препятствовали выполненным npm-обновлениям.

Выполнено 13.09.2026, revision `3be6e61b8fc85d4b16199dbe9910b38894159cb8` ([commit](https://git.personal.ksv741.ru/WealthLedger/frontend/commit/3be6e61b8fc85d4b16199dbe9910b38894159cb8)). **Dependencies** - На исходной revision `7a89356` свежий npm audit выявил 3 high affected-package entries: fast-uri, js-yaml и зависимый @redocly/openapi-core (5 distinct advisories). - Исправлено lockfile-обновлением: fast-uri 3.1.5 → 3.1.7, js-yaml 4.3.1 → 4.3.2, @redocly/openapi-core 1.34.19 → 1.34.20. - После чистого `npm ci`: `npm audit --include=dev --audit-level=low --json` и `npm audit --omit=dev --json` — **0 vulnerabilities**, exit 0; `npm ls --all --json` — exit 0. Все 45 direct dependencies используют exact versions; manifest соответствует lockfile. - SHA256 package-lock.json: `cee708f94d6bbd4ce6937ff83de6f537f60047105e03b45dc365d1b968b0e47d`. - WL-P2-12 учтён: прежний React Router fix сохранён; accepted Prisma tooling risk относится только к backend, новых frontend security exceptions нет. - По согласованному расширению scope #9 обновлены 8 major-групп: Babel 8, jest-dom 7, jsdom 30, lint-staged 17, react-i18next 17, React Router 8, Zod 4, Vitest/coverage 5. Выполнена миграция Zod error callbacks без изменения правил валидации и локализованных сообщений. TypeScript остаётся 5.9.3: последний openapi-typescript 7.13.0 требует peer ^5.x; совместимого обновления генератора пока нет. Ограничение и review trigger записаны в README. Dependency Dashboard #9 остаётся постоянным dashboard. **Secrets** - Gitleaks 8.30.1: `gitleaks git --log-opts=--all --redact=100 --no-banner` — **93 commits**, no leaks found, exit 0. Repository не shallow; scope — все локально доступные refs, без обещания проверки удалённых/unreachable объектов. - Исходное текущее дерево (324 файла, включая hidden/local config; без .git/node_modules/build/coverage outputs) отдельно проверено `gitleaks dir` с полной редакцией — no findings. Последующие изменения проверены Gitleaks в реальном pre-commit и повторным history scan итогового commit. Рабочее дерево после commit чистое. - В .husky/pre-commit первым шагом добавлен `gitleaks git --pre-commit --staged --redact=100 --no-banner`; secret finding и отсутствие инструмента блокируют commit. - `node --test scripts/test-pre-commit.mjs` проверяет чистый index при unstaged-секрете, блокировку staged-секрета до downstream hooks, отсутствие значения в выводе и блокировку без Gitleaks. Synthetic token создаётся в памяти; реальные секреты не используются. - Сканирование секретов локальное. npm audit обращается к npm registry с dependency metadata; исходники и значения секретов не отправляются. **CI / verification** - Существующий Frontend verify сохраняет `npm ci → npm run verify`. - Новый Frontend security работает на push/pull_request и ежедневно: полный checkout history, pinned Gitleaks 8.30.1 с SHA256-проверкой архива, regression test pre-commit, blocking npm audit runtime+dev (любой severity). - Локально Node 24.21.0 через `nvm use --silent`: `npm ci`, `KNIP_DISABLE_RAW_TRANSFER=1 npm run verify` — PASS: OpenAPI snapshot check, TypeScript, Biome, **46 files / 268 tests**, coverage 90.45% statements / 81.44% branches / 85.78% functions / 91.22% lines, Knip, FSD checks, application/Storybook builds. `git diff --check` — PASS. - [Gitea security run 13](https://git.personal.ksv741.ru/WealthLedger/frontend/actions/runs/13) — success на указанной revision. - [Gitea verify run 14](https://git.personal.ksv741.ru/WealthLedger/frontend/actions/runs/14) — success на той же revision. Критерии #4 выполнены. ADR 014 сохранён: frontend доверяет предоставленному OpenAPI snapshot; backend checkout/SHA/runtime OpenAPI checks не добавлялись. Branch protection/required checks остаются отдельной #2. Предупреждения Renovate об отсутствии GitHub token для metadata/release notes не требуют добавления секретов в репозиторий и не препятствовали выполненным npm-обновлениям.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/frontend#4