chore(ci+logs): eslint в CI, npm audit, logger с уровнями, retention error_logs

Шаги 1.6 и 1.7 плана production-готовности:
- eslint flat-config (баг-ловушки, легаси warn), lint блокирующий в pr-check
- npm audit --audit-level=high в CI (отчёт)
- фикс реального бага: условный useRef в TaskTitleInline
- server/utils/logger.ts (LOG_LEVEL/LOG_FORMAT) в 5 горячих местах
- error_logs retention 30 дней (worker), redactSensitive в captureErrorLog
- 0 errors lint, vitest 96/96
This commit is contained in:
2026-09-08 00:11:38 +03:00
parent 6eaca79cc6
commit abd5d4b65f
14 changed files with 1579 additions and 19 deletions

View File

@@ -244,3 +244,26 @@
- Как проверялось: `npm run check` чисто; vitest 96/96; `npm run build` собирается.
- Влияние на поиск/UX: поиск в реестре мгновенный как и был (фильтрация до виртуализации).
- Подводные камни: в виртуальном чате дата-разделители не sticky; возможна «игра» ширин колонок реестра при table-layout:auto; уход редактируемой строки за overscan размонтирует несохранённый ввод (стандарт виртсписков). Ручная проверка в браузере: реестр с длинными значениями, чат >100 сообщений (автоскролл, скролл к ответу).
---
## [1.6] CI: eslint + npm audit
- Статус: ✅ done
- Зачем: lint и аудит зависимостей в CI (Фаза 1).
- Что изменено: `eslint.config.js` (flat-config eslint 9 + typescript-eslint + react-hooks; только баг-ловушки, легаси — warn); скрипт `npm run lint`; pr-check.yml — шаги Lint (блокирующий) и npm audit --audit-level=high (continue-on-error, только отчёт).
- Результаты: старт — 703 проблемы; итог 0 errors / 576 warnings (exit 0). Попутно исправлен РЕАЛЬНЫЙ баг: условный useRef после early return в TaskTitleInline (client/src/pages/TaskDetail.tsx:1612) — react-hooks/rules-of-hooks.
- Как проверялось: npm run lint exit 0; vitest 96/96; `npm run check` чисто.
- Влияние на поиск/UX: нет.
- Подводные камни: npm audit нашёл 60 уязвимостей (49 moderate, 10 high, 1 critical — XSS в DOMPurify GHSA-v2wj-7wpq-c8vv) — в бэклог, чинить отдельным шагом; eslint-plugin-react-hooks взят v5 (v7 требует zod-validation-error/v4, в проекте v3.5).
## [1.7] Структурированные логи + retention error_logs
- Статус: ✅ done
- Зачем: единый logger с уровнями, автоочистка error_logs (Фаза 1).
- Что изменено:
- `server/utils/logger.ts` — уровни debug/info/warn/error (env LOG_LEVEL), LOG_FORMAT=json; подключён в 5 местах (error handler, SSE eventBus, gps worker, automation-scheduler, billing payments). Массовая замена console.* сознательно не делалась (инвазивно) — новые модули обязаны использовать logger.
- `server/workers/error-logs-retention.ts` — DELETE error_logs старше 30 дней, раз в сутки + при старте, unref-таймер.
- `server/index.ts` — redactSensitive() в captureErrorLog: маскировка password/token/secret/Bearer в записываемых сообщениях.
- Как проверялось: auth-роуты возвращают статичные тексты без секретов; vitest 96/96.
- Влияние на поиск/UX: нет.