# Устранение замечаний аудита 2026-09-18 Исходный отчёт проверял ревизию `14ed610`. Исправления подготовлены после `b88ff91`. ## Исправлено - №1–5: регистрация отпечатка отменяется при блокировке, смене сотрудника и через 60 секунд; повторный палец отклоняется; поток захвата корректно завершается; связь контролируется и восстанавливается автоматически. - №2–3, №27: повреждённое состояние обрабатывается fail-closed, ведутся три резервные копии, записи сериализованы и принудительно сбрасываются на диск, фоновые ошибки журналируются, `crash.log` ротируется. - №6–8: роли мигратора и приложения разделены; runtime-роль имеет `NOSUPERUSER NOBYPASSRLS`; пароли согласованы; мигратор использует `schema_migrations`, advisory lock и откатывает только последнюю миграцию после явного подтверждения. - №9–12: отметка обычного сотрудника не теряется при открытом диалоге администратора; PIN усилен и защищён задержкой; второй экземпляр перенаправляет активацию первому; дубликат пальца запрещён. - №13–14: журнал экспортируется в CSV, имеет ограничение размера и восстановимые резервные копии; уход после полуночи определяется по настраиваемой максимальной длительности смены. - №15–20: readiness возвращает `503` без деталей; маршруты соответствуют `/api/v1/staff`; OpenAPI сравнивается с runtime; пул БД обрабатывает ошибки; добавлен реальный RLS-тест двух tenant; audit log доступен runtime только на чтение/добавление; outbox хранит subject/actor; Redis-зависимости удалены до появления сценария. - №21–23, №25–29, №31–33: автозапуск открывает приложение в трее и не сохраняет Debug-путь; новый профиль не включает автозагрузку без решения администратора; защита последнего администратора исправлена; PIN совместим со старыми значениями; публичные имена по умолчанию маскируются; проект только x64; manifest очищен; correlation ID проверяется как ULID; версия синхронизируется проверкой; graceful shutdown имеет таймаут; standalone запрещён в production; базовые Docker-образы закреплены digest. - npm-зависимости обновлены: `npm audit` сообщает 0 уязвимостей. Форматирование включено в CI. ## Осознанно сохранено - №24: повторная авторизация перед удалением отпечатков, сотрудников и журнала сохранена по прямому требованию владельца. - №30: EULA ZKTeco добавлена рядом с DLL. Автоматическая Windows-сборка и подпись требуют Windows runner и сертификат подписи; этих ресурсов в текущем Forgejo окружении нет. ## Требует решения владельца, не является локальным исправлением кода - A1: окончательный контракт терминала как edge-клиента Staff и серверная синхронизация вместо постоянного локального source of truth. - A2: письменные согласия на биометрию, сроки хранения, правовое основание передачи уведомлений и политика трансграничной передачи должны быть утверждены с юристом. ## Проверка - `npm run check` — пройдено. - `npm run format:check` — пройдено. - `npm audit --audit-level=moderate` — 0 уязвимостей. - `dotnet build apps/KronaStaffTerminal/KronaStaffTerminal.csproj -c Release -p:Platform=x64` — 0 ошибок и 0 предупреждений. - PostgreSQL/Docker up/down и реальный RLS-тест добавлены в CI, но локально не запускались: Docker и PostgreSQL на машине разработки отсутствуют.