feat(app): add diagnostics and update runtime

This commit is contained in:
Codex
2026-06-06 20:42:34 +07:00
parent 925181a3b7
commit 7c40558cd3
23 changed files with 2232 additions and 2792 deletions

88
docs/SECURITY_TRIAGE.md Normal file
View File

@@ -0,0 +1,88 @@
# Security triage
Дата последнего triage: 2026-06-06
Этот файл фиксирует текущий статус `npm audit`, принятые решения по
dependency-upgrade и минимальные правила перед релизом. Он не заменяет
регулярное обновление зависимостей: цель в том, чтобы не терять контекст между
релизами и отличать runtime-риск от build-chain риска.
## Текущий статус
`npm run verify` выполняет:
- typecheck;
- tests;
- lint;
- build;
- audit summary.
Наблюдаемый audit snapshot после upgrade:
- 0 vulnerabilities;
- `npm run verify` проходит полностью;
- `npm run dist:dir` собирает unpacked Windows build.
## Выполненные обновления
- `electron` обновлен до `42.3.3`;
- `electron-builder` обновлен до `26.15.0`;
- `electron-vite` обновлен до `5.0.0`;
- `vite` обновлен до `7.3.5`;
- `@vitejs/plugin-react` обновлен до `5.2.0`;
- `electron-updater` обновлен до `6.8.9`;
- `esbuild` обновлен до `0.28.0`.
`vite` оставлен на major 7, а не поднят до 8, потому что актуальный
`electron-vite@5.0.0` объявляет peer range `^5.0.0 || ^6.0.0 || ^7.0.0`.
Переход на Vite 8 стоит делать отдельным шагом после совместимого релиза
`electron-vite`.
## Runtime baseline
Electron является runtime-платформой приложения, поэтому его audit-риск был
самым важным. После обновления runtime-риск из audit закрыт, но перед релизом
все равно нужен ручной smoke test Electron-поведения.
Текущие mitigations:
- `sandbox: true`;
- `contextIsolation: true`;
- `nodeIntegration: false`;
- строгий preload API через `contextBridge`;
- IPC runtime validation;
- CSP в renderer `index.html`;
- allowlist для внешних URL;
- deny-by-default permission handlers;
- запрет `webview` attach;
- renderer error/unhandled rejection reporting в main logs.
## Build-chain baseline
`electron-builder`, `electron-vite`, `vite` и `esbuild` обновлены отдельным
шагом от runtime upgrade. `npm run dist:dir` подтверждает, что packaged build
создается после обновления build-chain.
Перед публикацией installer все равно нужно проверить:
- NSIS installer build через `npm run dist`;
- запуск установленного приложения;
- сохранение данных в `%APPDATA%\Exercise Reminder\`;
- auto-update metadata и `update-channel`;
- импорт/экспорт данных;
- tray behavior;
- main window и reminder window;
- Dota 2 GSI install/uninstall и callback listener.
## Release rule
Перед релизом:
- `npm run verify`;
- `npm run dist`;
- smoke test installed app;
- проверка `update-channel`;
- повторный `npm audit`.
Если новый audit снова сообщает high runtime issue, релиз нужно считать
blocked, пока риск не разобран отдельно.