`verify_admin_token` / `AdminTokenAuth` в `backend/app/core/deps.py` не имели
НИ ОДНОГО вызывающего. Проверено разбором AST по всему репозиторию (Name /
Attribute / ImportFrom / строковые константы — формы, которые текстовый grep
не ловит): оба имени встречаются ровно в одном месте — в собственном
объявлении, строка 23 самого deps.py. Больше нигде.
Поведение сняли в PR #437 (заголовок X-Admin-Token убран со всех admin_*.py),
UI ввода токена — в PR #442. Поле держали «для быстрого rollback» полтора
месяца. Rollback это всё равно не ускоряло: dep нигде не проставлен, вернуть
его = править все admin_*.py, ровно как и было бы без сохранённого поля.
Что реально закрывает `/api/v1/admin/*` — два живых слоя:
1. middleware `rbac_guard` (app/main.py): `_ADMIN_API_RE` → 403 `admin only`
при role != admin. Покрыт tests/test_rbac.py — 24 теста, все зелёные.
2. Caddy basic_auth на весь gendsgn.ru (PR #426).
Удалено:
• backend/app/core/deps.py целиком (в файле не было ничего, кроме этого
хелпера; импортеров модуля тоже нет);
• `scrape_admin_token` из Settings — его единственным читателем был
удалённый хелпер;
• SCRAPE_ADMIN_TOKEN из .env.example. Прод-.env править не обязательно:
`model_config` = `extra="ignore"`, лишняя переменная безвредна;
• остатки в тестах: 10 декораторов `@patch(...scrape_admin_token)` и 25
`headers=ADMIN_HEADERS` — заголовок отправлялся во все admin-запросы и
никем не читался.
Попутно исправлены ДВА докстринга, обещавшие покрытие, которого нет:
test_admin_weight_profiles.py («401 при отсутствии X-Admin-Token») и
test_admin_ekburg_permits.py («отсутствие X-Admin-Token → 401/503»).
Соответствующего теста нет ни в одном из файлов — ни сейчас, ни до этого
коммита. Теперь докстринги указывают на tests/test_rbac.py, где проверка
действительно есть.
Верификация: полный сьют backend без tests/smoke — 4610 passed, 48 skipped,
0 failed (12м38с). Целевые файлы отдельно: 51 passed (24 rbac + 27 admin).
Closes#2775