## Why Пользователь не может заапрувить новость: POST /posts/{id}/approve → 500 Internal Server Error. В логах веба (journalctl -u vesti-web): File "/opt/vesti/web/app.py", line 180, in approve dirs_selected = [r["direction"] for r in cls] if cls else [dirn] UnboundLocalError: cannot access local variable 'dirn' where it is not associated with a value Причина: на строке 180 используется переменная `dirn` (направление поста), но она определяется позже (строка 185: `dirn = post.get("direction") or "linux"`). При approve поста без явно выбранных направлений (пустая форма) всегда падает UnboundLocalError. ## What Changes - В `web/app.py` (функция `approve`) перед строкой с `dirs_selected` определить: `dirn = post.get("direction") or "linux"` (и `lang = post.get("lang") or "ru"` — тоже используется ниже), чтобы порядок соответствовал использованию. - Либо заменить `[dirn]` на `[post.get("direction") or "linux"]` — минимальная правка. - Зависимость от `lang` — тоже проверяется до использования (строка 186). ## Why Not - Альтернатива — вынести `dirn/lang` в начало функции (до `dirs_selected`). Это чище: переменные определяются один раз и используются ниже без дублирования. - Проверяется на живом approve поста без направлений (пустая форма).