diff --git a/TODO.md b/TODO.md index 70e0ea2..b647c9f 100644 --- a/TODO.md +++ b/TODO.md @@ -240,6 +240,72 @@ Go-бинарь со своим релизным циклом, ставить ч говорит «чужой темы», и второе правило про то же место придётся держать согласованным с первым. +## 12. `WHEN`/`AND` в блоке стыка правил + +Блок для стыка двух правил записан английскими словами: + +``` +WHEN зависимость недоступна и ретраи вызова исчерпаны → ext-запись ERROR +AND тик фонового цикла упал по той же причине → доменная запись WARN +``` + +Рядом сказано, что `SHALL` не берётся ни в один словарь, потому что занят +OpenSpec. `WHEN` и `AND` — из того же набора и по той же причине должны бы +не браться, но взяты. Это нестыковка, а не решение. + +Варианты: + +- **перевести** на `КОГДА` / `И`: словарь набора один, и служебные слова + внутри канона следуют ему же; +- **оставить и объяснить**: блок стыка описывает поведение системы во + времени, а не выбор автора, — то есть это единственное место, где форма + спецификации уместна, и заимствование её синтаксиса намеренно. + +Второе честнее по смыслу (субъект там действительно система), но требует +явной оговорки в `LANGUAGE.md`, иначе читается как недосмотр. Заодно решить, +подпадают ли `WHEN`/`AND` под проверку «заглавные модальные слова не +встречаются вне правил»: сейчас формально нет, потому что в словаре их нет. + +## 13. Критерий «названного вреда» никого не обязывает + +`LANGUAGE.md` говорит, что ДОЛЖЕН требует двух условий сразу: нарушение +причиняет названный вред (критерий BCP 14) и норма проверяема машиной +(META-6). Но правила под первое условие нет: META-6 работает только в одну +сторону — «нет машинной проверки, понижай в СЛЕДУЕТ». Обратной, «проверка +есть, а вреда нет — не повышай», не существует, и автор ничем не связан. + +Решить, заводить ли META-24 под первое условие или оставить его семантикой +шкалы в описании языка. За правило: механически проверяемых мелочей больше, +чем важных вещей, и без нормы шкала размывается тем же способом, от которого +META-6 её защищает. Против: критерий «вред назван» проверяется чтением, а не +машиной, — то есть по META-6 сам он может быть только СЛЕДУЕТ. + +## 14. Одиннадцать таблиц не прочитаны на взаимоисключительность + +`LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по +умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы +такими: нумерованные строки есть в одиннадцати файлах канона, и ни одна +таблица под новое требование не прочитана. + +Конкретный подозреваемый — SLOG-11: «по реальному действию или изменению» +против «повторяющаяся служебная, по таймеру или поллингу». Периодическая +операция, которая всё-таки меняет данные, подходит под обе строки, и уровень +из таблицы не выводится однозначно. + +Работа читательская, машине не даётся; в список проверок она уже записана в +разделе «Чтением, потому что машине не даётся». + +## 15. Возможность, записанная модальным словом + +Четвёртая категория ISO — возможность и осуществимость — ключевого слова не +имеет: такие утверждения пишутся обычной прозой. Значит канон надо просмотреть +на обратную ошибку: где утверждение о факте («библиотеки по умолчанию отдают +именно его», «SQLite сравнивает строки побайтово») записано модальным словом +и тем самым превратилось в норму, которую никто не вводил. + +Смотреть в первую очередь абзацы «Почему»: там факты и стоят, там же соблазн +усилить их модальностью выше всего. + ## Из вчерашнего, не закрыто - Вынос арх-ядра из `errors` и `logging`: закроет две хрупкие ссылки из