## Прожарка: wacli  
**Оценка: 6/10**

### Критично
- [⚠ МНЕНИЕ] **Dockerfile — строки 4, 13** – `apk add` без указания версии. При обновлении базового образа контейнер может «разорваться» из‑за несовместимых пакетов.  
- [✓ ФАКТ: CVE-Ищейка] **Dockerfile — отсутствие `HEALTHCHECK`** (Trivy DS‑0026). Оркестратор не будет знать, когда контейнер перестал отвечать, и может бесконечно рестартовать его.  
- [✓ ФАКТ: Инфра-Ревизор] **Checkov — CKV_DOCKER_2** (файл `Dockerfile`). Образ собирается от имени `root`, что открывает путь к привилегированному выполнению внутри контейнера.  
- [✓ ФАКТ: Код-Рентген] **Semgrep — run‑shell‑injection** (файл `.github/actions/setup-ci-env/action.yml`, строка 52). Переменная `${{ github.* }}` подставляется в `run:` без экранирования – потенциальный шанс выполнить произвольный шелл в CI.  
- [✓ ФАКТ: YAML-Граммарнаци] **Yamllint — длинные строки** (например, `ci.yml` строки 57, 67, 78 > 80 симв.). Такие строки ухудшают читаемость и могут привести к ошибкам при копировании‑вставке.

### Надо переделать
- [⚠ МНЕНИЕ] **Версионирование пакетов** – укажите точные версии в `apk add` (например, `apk add git=2.42.0-r0`).  
- [⚠ МНЕНИЕ] **Добавьте `HEALTHCHECK`** – проверка `curl -f http://localhost:8080/health || exit 1` спасёт от «зависших» подов.  
- [⚠ МНЕНИЕ] **Перейдите на непривилегированного пользователя** – создайте `USER appuser` и задайте нужные права в контейнере.  
- [⚠ МНЕНИЕ] **Экранируйте переменные в GitHub Actions** – используйте `${{ toJSON(github) }}` или явно задавайте безопасные значения.  
- [✓ ФАКТ: YAML-Граммарнаци] **Приведите YAML‑файлы к единому стилю** – добавьте `---` в начало, поправьте отступы перед комментариями, сократите строки до 80 символов.

### Мелочи
- [⚠ МНЕНИЕ] В `Dockerfile` используется `CGO_ENABLED=1`, но в большинстве файлов CGO не нужен – можно собрать без него, уменьшив размер образа.  
- [⚠ МНЕНИЕ] Файлы `*_test.go` разбросаны по всему дереву; их можно собрать в отдельный каталог `tests/` для чистоты.  
- [⚠ МНЕНИЕ] Некоторые файлы (`cgo_required.go`, `store_cleanup.go`) содержат только заглушки, их стоит удалить или добавить реальную реализацию.  
- [⚠ МНЕНИЕ] В `go.mod` указана версия Go 1.25, но CI использует `golang:1.25-alpine`; стоит зафиксировать образ в CI, иначе при смене тега образ может «сломаться».  

### Что хорошо
- [⚠ МНЕНИЕ] **Полный набор CLI‑команд** – от отправки сообщений до управления группами, покрытый тестами (≈ 150 юнит‑тестов).  
- [⚠ МНЕНИЕ] **Тестовое покрытие** – почти каждый публичный метод имеет соответствующий `*_test.go`.  
- [⚠ МНЕНИЕ] **Структурированность кода** – отдельные пакеты `cmd/wacli` и `internal/wa` чётко разделяют уровень интерфейса и бизнес‑логику.  
- [⚠ МНЕНИЕ] **Использование `go:embed`** (в `docs.go`) для включения справки без внешних файлов.  
- [✓ ФАКТ: Докер-Дед] **Линтеры** уже настроены: `hadolint`, `yamllint`, `semgrep` – их вывод виден в CI, что упрощает поддержание качества.  

### Вердикт
**Добротный проект, но «скрепки» от оригинальности и несколько грубых уязвимостей в Docker‑образе держат его на уровне «можно, но требует доработки».**

---

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