Пять состояний, которых не может быть, — и ваш код разрешает все пять
Мы дали агенту обычную задачу — экран со списком товаров, загрузка, ошибка, данные, — и получили класс с одним булевым полем и двумя nullable. Это восемь комбинаций, из которых что-то значат три; остальные пять компилируются, проходят ревью, уезжают в прод и лежат там. Разбираем, что такое невозможное состояние, почему это то же самое, что сломанный инвариант, почему настоящая цена — не баги в рантайме, а неписаные договорённости, которые каждый читатель восстанавливает заново, и как sealed-классы вместе с проверкой на полноту превращают целый класс ошибок в ошибку сборки. Плюс: почему enum с nullable-полями делает только хуже, какая одна строка молча выключает всю защиту и где алгебраические типы не помогают вовсе.






