Роберт Мартин выкатил свой агентный скилл — ub-mode. Он упаковал практики экстремального программирования и TDD в протокол для LLM, заставив нейронки отчитываться перед детерминированными линтерами и тестами.
Логика ub-mode разбита на три фазы:
1. First Make it Work (Сначала сделай, чтобы работало)
🔵 Жесткий TDD: агент обязан написать падающий тест ДО изменения продакшн-кода. Убедиться, что он падает именно по ожидаемой причине, и только потом сделать минимальный фикс, который заставит тест позеленеть.
🔵 Laziness Protocol: одно решение живет строго в одном месте. Никаких «заодно подправлю соседний модуль».
🔵 Архитектурный каркас: нелегальные состояния данных должны быть невозможны на уровне типов, а валидация выносится на внешние границы, чтобы внутренняя бизнес-логика оставалась чистой функцией.
2. Then Make it Right (Затем приведи в порядок)
Вместо субъективной оценки «код вроде нормальный» подключаются автоматические quality-gates:
🔵 CRAP score < 10: агент обязан снижать цикломатическую сложность функций и дотягивать покрытие тестами до порогового значения.
🔵 Мутационное тестирование: инструмент Mutator прогоняет мутации по коду. Агент должен закрыть тестами слепые зоны и буквально «убить выживших мутантов».
🔵 Dryer: отслеживание структурного дублирования кода. Любой кусок со схожестью выше 0.8 рефакторится.
🔵 Тестирование строго поведения, а не кишок реализации.
3. Practice (Гигиена процесса)
🔵 Guard the Context Window: агент обязан защищать контекстное окно. Основной тред должен оставаться компактным: черновая простыня расчетов выносится во внешние файлы, а в рабочем контексте остается только выжимка. Модель перестает тупеть от перегруза токенов.
🔵 Логирование каждого действия с объяснением причин и фиксация изменений серией мелких атомарных коммитов.
Можно смело объединять с правилами Андрея Карпаты. Они учат нейронку вести себя как адекватный разработчик с чувством меры, а ub-mode выстраивает вокруг нее вольер из автоматических проверок.