# AI‑анализ проекта ipwhitelist‑app — сравнение > Дата: 2026-06-04 > Простая модель (GPT) vs DeepSeek V4 Pro --- ## 1. Анализ простой модели (prompt‑review.txt) ### Общее заключение Нет. Нельзя деплоить в production в текущем состоянии. ### Найденные проблемы | # | Серьёзность | Описание | |---|---|---| | 1 | **Critical** | `ui/routes/auth.js` — `await` без `async` в `POST /login‑token` → SyntaxError | | 2 | **Critical** | `server.js` — `/export` открыт публично без авторизации | | 3 | **Major** | Источники профилей не унифицированы (JWT vs IAM), хардкод `WZ01112` для admin | | 4 | **Major** | `jwt.decode()` без верификации в UI | | 5 | **Minor** | `'unsafe-inline'` в CSP | | 6 | **Minor** | Разнобой таймаутов HTTP (5s vs 10s) | | 7 | **Minor** | Логирование IAM слабое | ### Оценки | Критерий | Балл | |---|---| | Понятность DevOps | 8/10 | | Чистота кода | 6/10 | --- ## 2. Оценка DeepSeek V4 Pro ### Что модель нашла верно - `await` без `async` — реальный критический баг, приложение упадёт при запуске. - `/export` без авторизации — реальная дыра безопасности. - Дублирование IAM/JWT‑логики — действительно размазано по `oidc.js`, `auth.js`, `ui/routes/auth.js`. - `'unsafe-inline'` в CSP — надо убирать (nonce/hash). - Разнобой таймаутов — мелочь, но стоит унифицировать. ### Что модель пропустила | # | Серьёзность | Описание | |---|---|---| | 1 | **Critical** | Хардкоженный IAM‑токен `tazetdinovn@gmail.com` (prod) лежит в `tests/api-crud.sh` в открытом виде и уже в гите. | | 2 | **Major** | `DEV_MODE=true` на итало — но код пытается вызывать `fetchIamUser` даже в mock‑режиме. IAM недоступен локально → каждый логин будет падать с таймаутом или ошибкой. | | 3 | **Major** | Порядок middleware: `session` → `oidc` → `ui` — в OIDC‑роутере `src/routes/oidc.js` свой `req.session.user`, а `ui/index.js` делает свой `jwt.decode()` — возможен конфликт/перезапись. | | 4 | **Major** | Нет механизма миграций БД — только `schema.sql` с CREATE, нет ALTER/версионирования. | | 5 | **Minor** | `csrfToken` в `views/index.ejs` передаётся как пустая строка (`csrfToken: ''`) — CSRF фактически отключён для UI‑слоя. | | 6 | **Minor** | `package.json` → `"version": "0.5.17"`, а `README.md` → `v0.5.14` — расхождение версий. | | 7 | **Minor** | `require('../auth')` внутри `src/routes/oidc.js` создаёт циклическую зависимость: `auth.js` → `routes/oidc.js` → `auth.js`. Работает только из‑за кеша Node.js, но хрупко. | --- ## 3. Итоговое сравнение | Параметр | Простая модель | DeepSeek | |---|---|---| | Критические баги найдены | 2 из 3 | +1 (токен в гите) | | Архитектурные проблемы | Поверхностно | Глубже (middleware, циклические зависимости, миграции) | | Рантайм‑поведение | Не анализировала | Учёл DEV_MODE и реальные сценарии | | Точность попаданий | 6/7 верных | Все найденные подтверждены + новые | | Ложные срабатывания | 0 | 0 | **Вывод:** простая модель дала добротный первый проход — нашла два критических бага и дала разумные рекомендации. Но не копнула глубже: пропустила утекший токен, не проверила рантайм‑поведение в DEV_MODE и не заметила архитектурные завязки. Для production‑review нужен более глубокий анализ.