Рабочие заметки после разбора через Admin API и код ядра Discourse (ветка Cursor в репозитории hoee).
Объект
На инстансе админ-карточка: /admin/users/-4/chatbot (Chatbot в админке).
Что вернул админский JSON (снимок проверки)
id: -4 (это бот по правилам ядра:user_id > 0только для «живых» пользователей)username: Chatbotadmin: truemoderator: falsepost_count: 0can_be_deleted: falsecan_be_anonymized: false
Почему can_be_deleted: false при нуле постов
В Guardian#can_delete_user? удаление запрещено, если целевой пользователь admin. Это не связано с числом постов в нашем случае.
Почему руками через UI и админский HTTP часто «не дают»
Для операций вроде revoke admin / destroy на негативный id не проходит Guardian#can_administer?: там есть условие, что идентификатор цели положительный (obj.id.positive?). Поэтому запросы к member-роутам вида «как у обычного username» дают 404, а с сегментом -4 возможен 403 invalid_access, даже когда API-актер - staff.
Итог: снять admin и удалить учетку штатным Admin API по тому же UX, что для людей, обычно нельзя - нужен другой контур (ниже).
Мягкий путь без удаления строки в БД
Отключить модуль AI-бота в настройках сайта: параметр ai_bot_enabled (false - поведение GPT-бота и связанного UI в ЛС/хедере приглушается; строка пользователя при этом может остаться).
На машине с checkout репозитория hoee и файлом discourse.env добавлен хелпер:
scripts/discourse-ai-chatbot-operator.sh audit- краткий дамп полей из/admin/users/-4/list.jsonai-bot-disable/ai-bot-enable- PUT наai_bot_enabled(ключи system изdiscourse.env, не публиковать)
Жесткий путь: реально удалить User
Только на хосте приложения Discourse, со снимком БД до правок: в консоли Rails снять флаг admin у записи (например update_columns), затем UserDestroyer от живого admin с id > 0 и delete_posts: true при необходимости. Текст блока для копирования: scripts/discourse-ai-chatbot-operator.sh rails-destroy-snippet.
Риски: плагин discourse-ai при обновлениях может пересоздавать ботов; возможны сообщения о missing bot user, пока модуль не починит состояние.
Ссылки по коду upstream
- discourse/discourse
app/models/user.rb-human?/ отрицательные id - discourse/discourse
lib/guardian.rb-can_administer? - discourse/discourse
lib/guardian/user_guardian.rb-can_delete_user?
Если нужно, в ответах можно вынести отдельную инструкцию «как проверить актуальное значение ai_bot_enabled через Admin → Настройки → плагин discourse-ai» без API.