После Python 3 ломать нельзя. Деталь реализации становится обещанием ровно тогда, когда на неё оперлось слишком много кода.
Единственный корень без отдельных глав — потому что это не механизм, а рамка, в которой принимались все остальные решения.
Python 3 вышел в 2008 году и намеренно сломал совместимость. Главная причина была одна и она была правильной: строки и байты требовалось развести окончательно, а сделать это без слома невозможно. Заодно починили деление, печать, итераторы вместо списков в половине встроенных функций, привели в порядок стандартную библиотеку.
Миграция заняла двенадцать лет. Поддержка Python 2 закончилась в 2020-м, к тому моменту крупные проекты переходили годами, а некоторые не перешли никогда. Инструменты для автоматического перевода помогали лишь частично — семантика str и bytes различалась так, что машине приходилось угадывать.
Вывод, сделанный сообществом и зафиксированный на практике: ломать больше нельзя. Не «нежелательно», а нельзя — цена оказалась несопоставимой с любой выгодой от чистоты языка.
Отсюда всё, что видно сегодня:
dataclass запретил его у себя, а язык не тронулdict из детали реализации стал гарантией — не потому, что так задумали, а потому, что на него уже оперлисьПоследний пункт — самый содержательный, и он повторяется по всему канону. Деталь реализации становится обещанием ровно тогда, когда на неё оперлось слишком много кода. Порядок словарей прошёл этот путь за один релиз. Детерминированное разрушение по счётчику ссылок его не прошло и, скорее всего, не пройдёт — но опирается на него половина написанного кода.
Поэтому шкала твёрдости из этого канона — не педантизм, а рабочий инструмент: она отвечает на вопрос «сломается ли мой код на другой реализации или в следующем релизе», и на staff-уровне этот вопрос задают прямо.