# ADR-027: Код `internal` для сбоя на стороне сервера ## Контекст [ADR-026](026-protocol-error-codes.md) сделал перечень кодов ошибок в `protocol.md` исчерпывающим: клиент разбирает поле `error`, а не статус. Кода для `500` в перечне нет, а сбои существуют — недоступная база, ошибка записи. Этап 1 упёрся в это на первом же запросе к хранилищу: отвечать телом без кода нельзя, придумывать код в коде молча — тоже. ## Решение - Сбой на стороне сервера — `500` с кодом `internal`. Сообщение общее и не зависит от причины. - Причина уходит только в журнал сервера: ни текст ошибки базы, ни имена таблиц, ни ник клиенту не показываются. Наружу — код и статус. - Код добавлен в перечень «Коды ошибок» `protocol.md` и в общие правила. - `internal` — не ветка протокола, а признак поломки: ни один сценарий клиента на него не рассчитывает, повтор запроса допустим. ## Следствия - Перечень кодов снова исчерпывающий: у любого ответа сервера есть разбираемый код. - Оператор видит причину в `journalctl`, клиент — нет. - `500` в журнале означает ошибку в коде или в окружении и разбирается, а не считается нормой.