| IV.1 Никаких «магических» значений | Таймауты, повторы, размеры, лимиты, TTL и пороги задаются один раз именованной константой или полем конфига и переиспользуются. |
| IV.2 Имена | oxl fmt не переименовывает, анализатор выдаёт предупреждение naming. |
| IV.3 Ошибки | Возвращайте конкретные @error-типы, а не строки. |
| IV.4 Асинхронность | Цепочка — для последовательности шагов с общим обработчиком ошибок и дедлайном; простой последовательный код пишите обычными инструкциями. |
| IV.5 Данные и схемы | Не меняйте тип поля — добавляйте новое поле и помечайте старое @removed. |
| IV.6 Распределённость | Любой rpc, который может повторяться (саги, надёжные шаги, @retry), — @idempotent. |
| IV.7 Тесты | На каждый rpc — юнит-тест обработчика с моками зависимостей. |