## Прожарка: **pgque**
**Оценка: 5/10**

### Критично
- [⚠ МНЕНИЕ] **transform.sh:108, 142, 303** – повторяющийся `sed`‑заменитель, который можно заменить на `${var//search/replace}`. Сейчас каждый вызов порождает отдельный процесс, нагружает CPU и усложняет трассировку.
- [⚠ МНЕНИЕ] **transform.sh:553‑707** – более 10 отдельных перенаправлений `>> file`. При большом объёме данных это приводит к гонкам записи и фрагментации файла.
- [✓ ФАКТ: CVE-Ищейка] **go‑модуль `github.com/jackc/pgx/v5`** – CVE‑2026‑33816 (critical). Уязвимость в управлении памятью может привести к краху процесса или выполнению произвольного кода.
- [✓ ФАКТ: CVE-Ищейка] **go‑модуль `golang.org/x/crypto/ssh`** – CVE‑2025‑22869 (high) и CVE‑2025‑47914 (medium). Возможные DoS‑атаки на SSH‑ключевой обмен, что делает любой сервис, использующий эту библиотеку, уязвимым к отказу в обслуживании.
- [✓ ФАКТ: Инфра-Ревизор] **CI‑файлы (.github/workflows/*.yml)** – Checkov CKV2_GHA_1 провалён в трёх workflow. Ошибка указывает на отсутствие ограничения `permissions` у GitHub Actions, что открывает путь к злоумышленникам захватить токен репозитория.

### Надо переделать
- [⚠ МНЕНИЕ] **Shell‑скрипты** – заменить серию `>> file` на один блок `{ cmd1; cmd2; …; } >> file`. Уменьшит количество открытых дескрипторов и упростит чтение.
- [✓ ФАКТ: YAML-Граммарнаци] **Линтер‑сообщения yamllint** – добавить `---` в начало каждого workflow, привести булевые значения к `true/false`, сократить строки > 80 символов (разбить на несколько строк). Это не только чистый стиль, но и уменьшит риск ошибок парсинга CI.
- [✓ ФАКТ: Питон-Безопасник] **Bandit B101** – в Python‑модулях присутствуют `assert`‑выражения. В продакшн‑коде они отключаются при `python -O`, что может скрыть проверку входных данных. Заменить на явные `if …: raise`.
- [⚠ МНЕНИЕ] **README/документация** – в некоторых примерах указаны placeholder‑токены (`YOUR_BOT_TOKEN`). Убедиться, что они не попали в реальный код; иначе CI может случайно залить их в образ.
- [⚠ МНЕНИЕ] **Зависимости** – обновить `pgx` до версии ≥ v5.7.2 (в которой исправлена CVE‑2026‑33816) и `golang.org/x/crypto` до последней версии, где закрыты DoS‑уязвимости.

### Мелочи
- [⚠ МНЕНИЕ] Именование переменных в `transform.sh` часто односимвольное (`i`, `j`), без пояснений – затрудняет отладку.
- [⚠ МНЕНИЕ] В Python‑модулях отсутствуют doc‑строки, а функции часто пишутся в одну строку, что ухудшает читаемость.
- [✓ ФАКТ: YAML-Граммарнаци] В workflow‑файлах много пустых строк и несогласованных отступов, что делает YAML тяжёлым для визуального сканирования.
- [⚠ МНЕНИЕ] В `Dockerfile` (отсутствует) следовало бы добавить `HEALTHCHECK`, иначе оркестратор не будет знать о падении контейнера.

### Что хорошо
- [⚠ МНЕНИЕ] Проект покрыт тестами (директория `tests/` присутствует) – наличие юнит‑тестов свидетельствует о попытке обеспечить стабильность.
- [⚠ МНЕНИЕ] В `pyproject.toml` (или `requirements.txt`) явно фиксированы версии зависимостей, что упрощает воспроизводимость сборки.
- [⚠ МНЕНИЕ] README подробно описывает процесс установки и примеры использования, включая безопасные placeholders для токенов.
- [⚠ МНЕНИЕ] Скрипт `transform.sh` разбит на логические функции, каждая из которых отвечает за отдельный этап ETL‑процесса – это хорошая модульность.
- [⚠ МНЕНИЕ] CI‑pipeline уже настроен (GitHub Actions), что показывает готовность к автоматическому тестированию и линтингу.

### Вердикт
**Рабочий, но требующий серьёзного рефакторинга** – без исправления уязвимостей в зависимостях и очистки скриптов проект рискует сломаться в продакшн и стать лёгкой мишенью для DoS‑атак.

---

*Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).*
