# ADR-027: Код `internal` для сбоя на стороне сервера

## Контекст

[ADR-026](026-protocol-error-codes.md) сделал перечень кодов ошибок в `protocol.md` исчерпывающим: клиент разбирает поле `error`, а не статус. Кода для `500` в перечне нет, а сбои существуют — недоступная база, ошибка записи. Этап 1 упёрся в это на первом же запросе к хранилищу: отвечать телом без кода нельзя, придумывать код в коде молча — тоже.

## Решение

- Сбой на стороне сервера — `500` с кодом `internal`. Сообщение общее и не зависит от причины.
- Причина уходит только в журнал сервера: ни текст ошибки базы, ни имена таблиц, ни ник клиенту не показываются. Наружу — код и статус.
- Код добавлен в перечень «Коды ошибок» `protocol.md` и в общие правила.
- `internal` — не ветка протокола, а признак поломки: ни один сценарий клиента на него не рассчитывает, повтор запроса допустим.

## Следствия

- Перечень кодов снова исчерпывающий: у любого ответа сервера есть разбираемый код.
- Оператор видит причину в `journalctl`, клиент — нет.
- `500` в журнале означает ошибку в коде или в окружении и разбирается, а не считается нормой.
