- TOOL.md был стартовой точкой разработки инструмента и свою задачу
выполнил: решения о нём теперь живут в его собственном репозитории,
открытые вопросы перенесены туда же
- питоновский conv собран под прежнюю модель копий (зеркальное дерево,
именованные регионы, origin_hash) и удалён вместе с ней
- команды в README.md переписаны на convy, включая suite-сторону и sync
- оба манифеста теперь данные инструмента: он их читает и переписывает
целиком, комментариев они не держат — точка в начале ставит их рядом
со служебными файлами, а не среди содержимого репозитория
- прежнее основание из TOOL.md («в наборе файл правится при каждой новой
теме, и прятать его незачем») отпало: правит его convy
- ссылки в README.md, CLAUDE.md, TOOL.md и TODO.md обновлены
- компонент — область репозитория, где выбранные слои действуют
одновременно; сборка идёт по разу на компонент, у каждого своя директория
копий, подписка и локальная часть, секции [components.<имя>] в манифесте
- плоский набор описан как низкий конец модели, а не отдельный режим: тема с
одним слоем собирается копированием, ключи оси и lang/stack не пишутся
- в TODO заведён вопрос о реестре значений осей и судьбе extends:
- тема определяется решением, а не веществом (META-33) и нужна потребителю
целиком (META-34); слой сужает базу, но не отменяет её (META-35), иначе
это другая тема, а вид приложения называется в области действия (META-36)
- добавлен раздел «Как проверить границу темы»: пять вопросов со ссылками
на правила, включая META-20; те же строки в CLAUDE.md, а в LANGUAGE.md
оговорка, что граница темы языку не принадлежит
- в TODO заведён прогон восьми тем по критериям с разбором подозреваемых:
шесть правил time выносят вердикты чужих тем, logging мешает три страта
- родовое «манифест» заменено именем уровня: файл в наборе описывает сам
набор, файл в проекте — подключённые конвенции, и каждый назван по тому,
что описывает
- по имени рядом лежащего манифеста определяется контекст: suite.toml —
набор, .conventions.toml — проект; в TOOL.md решение зафиксировано, из
открытых вопросов убрано
- пятая, необязательная часть правила: код парой «плохо → хорошо» после
обоснования; метка добавлена в словарь (EXAMPLES) и в строку о версии
языка во всех тринадцати файлах
- сказано, чем примеры не являются: требований в блоке нет, дословным
сниппетом он не служит, при расхождении с нормой правят пример
- READING.md обновлён по META-30, в машинные проверки добавлен порядок
блоков, в читательские — что примеры норму не расширяют
- META-31 и META-32: номера идут без пропусков, ссылка обязана разрешаться;
обе проверки стали механическими — данных со стороны языка им хватает
- заведена метка СНЯТО: заголовок и номер снятого правила сохраняются, норму
с обоснованием заменяет блок с датой и причиной, отдельный реестр снятых
номеров не нужен
- META-9, META-16 и META-26 переписаны из таблицы «Освободившиеся номера» в
заглушки; три висячие ссылки, тянувшиеся с утра, закрылись
- заведён READING.md: словарь со значениями, форма правила и её граница,
ссылки, локальная часть — без разделов о ведении набора и без META-ссылок,
примеры на X-префиксах
- сборщик кладёт его в docs/conventions/ и перезаписывает целиком; в манифест
набора добавлена секция [language] с версией и двумя документами
- META-30: правка словаря или состава частей правила доходит до READING.md,
иначе потребитель толкует ДОПУСКАЕТСЯ по прежней версии
- META-9 снят: удаление оставляло подписчика, пришедшего после, без нормы и
без проверки, а «механизировано у всех» канону не проверить — списка
подписчиков у него нет по построению
- META-8 переписан в запрет: норма остаётся в правиле, чем бы её ни
проверяли; линтер сообщает, что нарушено, но не что требуется (META-6)
- МЕХАНИЗИРОВАНО объявлена свойством репозитория: в тексте конвенции отметки
нет, её место — запись о механизации ниже маркера (META-7)
- проверки разведены по роли слова: то, что язык употребляет (конвенции и
GUIDE.md), проверяется; то, что цитирует (LANGUAGE.md, README.md), — нет
- список машинных проверок разбит на форму правила и распространение:
вторая группа (тема в шапке, пути канона, чужие префиксы, локальные X)
касается только того, что едет к потребителю
- в GUIDE.md добавлена строка о версии языка и убрано заглавное СЛЕДУЕТ из
вводной прозы «Оформления» — единственное нарушение, которое исключение
прятало
- тема — набор правил об одном фокусе разработки, имя латиницей (нижний
kebab-case рекомендуется, годится любой идентификатор, пригодный для имени
файла); определение в LANGUAGE.md и README.md
- заведены META-28 и META-29: тема объявляется в шапке (`topic:`), стоит в
манифесте набора и не переиспользуется; `topic:` добавлен во все 12 файлов
- prefixes.toml и topics.toml слиты в manifest.toml — манифест набора против
манифеста подключения `.conventions.toml`, разделы topics/prefixes с live
и retired
- область правила — от его заголовка до следующего заголовка любого уровня;
метка открывает блок, хвост после ПОЧЕМУ — продолжение обоснования, а
таблица после модальной метки — часть нормы
- проверка «заглавных модальных слов вне правил нет» стала реализуемой:
прозой считается то, что лежит вне областей правил
- нормы, сидевшие в хвостах, подняты в блок нормы: заведены SLOG-25.4 и
GERR-26.3, у GTIM-12 «базовый слой» заменён на TIME-12
- META-6 переписан: ступень требует не машинной проверки, а того, чтобы
двое проверяющих по тексту правила выносили один вердикт; проверяющий по
умолчанию — читатель, человек или агент
- заведён META-27: машинная проверка желательна везде, где пишется, но
ступени не задаёт — иначе канон стоит в СЛЕДУЕТ до появления скриптов;
обоснование META-25 пересобрано на новом условии
- LANGUAGE.md и CLAUDE.md приведены к той же формулировке, вопрос 1 из
TODO закрыт, остальные перенумерованы
- метка обоснования пишется заглавными и вошла в словарь набора: скелет
правила теперь целиком из ключевых слов, а не смесь `**ДОЛЖЕН.**` и
`**Почему.**`; в переводе на другой язык метка меняется как остальные слова
(ПОЧЕМУ / WHY), 235 вхождений заменены
- метки правила выделены из шкалы в отдельный перечень: ПОЧЕМУ и
МЕХАНИЗИРОВАНО обязательности не задают, а размечают части, и стандартом не
даются ни в одном языке — раньше МЕХАНИЗИРОВАНО висело строкой в таблице
модальности
- версия языка поднята до 2, потому что изменение формы меняет чтение уже
написанного текста; строка о версии в двенадцати конвенциях перечисляет
теперь и метки, а служебные слова сценария в неё по-прежнему не входят
- запрет слов обязательства в «Почему» был лишним по построению: правило о
заглавных уже делает строчное «обязан» ненормативным, так что второй копии
нормы не возникает, а цена — автор воюет со списком слов вместо объяснения
- в LANGUAGE записано прямо: рамки у обоснования только смысловые, длина,
рассуждение, примеры и ссылки на внешние практики и чужие проекты допустимы
- заведён раздел «Освободившиеся номера»: META-16 и META-26 с причинами. Без
такого списка упоминание номера в прозе не отличить от ссылки на исчезнувшее
правило — это же нужно будущей проверке ссылок
- «Почему» не пересказывает норму словами обязательства: у оригинала есть
идентификатор, у копии нет, и расходятся они при первой правке оригинала, а
отступление от копии адресовать нечем
- модальность рекомендательная по META-6: греп находит слово, а не нарушение
— «за попыткой следует повтор» и «становится обязанностью вызывающего»
описывают ход событий; утверждения о невозможности («нельзя») правилом не
затрагиваются, это ISO-евская возможность в прозе
- SLOG-12 починен: факт о том, что `slog` не разделяет CRITICAL и FATAL, уехал
из нормы в «Почему», а норма теперь говорит то же, что заголовок
- ДОЛЖЕН выбирается, только когда в «Почему» сказано, что ломается при
нарушении: до сих пор обязывало лишь второе условие (META-6, машинная
проверка), и любую проверяемую мелочь можно было пометить ДОЛЖЕН
- модальность самого правила — СЛЕДУЕТ, и это не слабость: «вред назван»
устанавливается чтением, значит по META-6 иначе и быть не может
- kebab-case в именах файлов пересобран как пример META-25: проверяется
регуляркой тривиально, но вреда нет — потому правилом и не записан
- `КОГДА`, `ТОГДА`, `И`, `ИЛИ` (по-английски WHEN/THEN/AND/OR) подчиняются тем
же требованиям, что модальные слова: одна форма на роль, заглавными, набор
один на канон и выбирается под естественный язык
- модальностью они не являются — обязательности не задают, только структуру,
поэтому в строку о версии языка не попадают и под проверку «модальные слова
вне правил» не подпадают
- единственный сценарный блок канона (SLOG, «Два цикла повтора») переписан с
WHEN/AND на русские связки; отказ от `GIVEN/WHEN/THEN` уточнён — он касается
общей формы записи, а на стыке правил эта форма взята сознательно
- языковой и стековый слои называют идентификатор правила арх-слоя своей темы
прямо в норме: подписываются темой, а не слоем, поэтому базовый слой в
собранной копии присутствует всегда и ссылка не ведёт в пустоту
- разрешение узкое по построению — на слои других языков и стеков не
распространяется, их состав в копии зависит от манифеста
- из META-21 убрано предписание ссылаться на свой слой словами «базовый
слой»: слова не проверяются и не ведут к утверждению, а идентификатор ведёт
- 31 регион `<!-- local:имя -->` в двенадцати файлах удалён, а не перенесён:
локальное принадлежит копии и живёт ниже маркера `<!-- conv:local -->`
(META-22), так что наполнять регионы в каноне нечем
- вместе с ними ушли два опустевших раздела «Связано» — в arch и ansible
слоях app-directories канонических ссылок нет, а пустой заголовок ничего
не адресует; CLAUDE.md уточнён: раздел заводят, когда ссылки есть
- форма проверена скриптом: у всех правил модальность и «Почему», префиксы
сходятся с реестром, дыр в нумерации нет
- шкала обязательности объявлена инвариантом, а набор ключевых слов —
параметром естественного языка набора: для английского готовый словарь
даёт BCP 14, для прочих берут перевод стандарта или делают свой; отклонены
синонимы ступеней и `SHALL`, занятый OpenSpec
- применены шесть дельт: нормативно только заглавное написание (RFC 8174),
ДОЛЖЕН требует названного вреда и машинной проверки сразу, ДОПУСКАЕТСЯ
адресовано рецензенту, МЕХАНИЗИРОВАНО выведено из шкалы в отметку рядом с
модальностью (ISO/IEC/IEEE 29148), у таблиц объявлены политика совпадения
и полнота (DMN)
- «Форма записи — LANGUAGE.md» в двенадцати конвенциях заменена строкой о
версии языка по образцу boilerplate BCP 14: пути канона в копии не
существует, а словарь и правило заглавных строка несёт сама
- именованные регионы `<!-- local:имя -->` заменены на единственный
`<!-- conv:local -->`: всё ниже него принадлежит репозиторию, всё выше
пересобирается, поэтому имени-которое-можно-осиротить больше нет
- лок-файла и `origin_hash` в шапке нет — «что было в прошлый раз» знает git,
копии закоммичены, автоматического обновления не существует; транспорт
назад (`push`) убран вместе с ними
- заведены META-22 (репозиторное пишется ниже маркера) и META-23 (форк не
носит `origin:`), META-17 переписан под маркер; буква `X` в префиксе
зарезервирована за локальными правилами потребителей
- одиннадцать открытых вопросов по сборке, тулингу и разделению языка и
набора конвенций: в переписке они теряются, а часть уже противоречит
README, и это противоречие видно только рядом с текстом
- снята строка «Не коммитится» и поправлено то же утверждение в CLAUDE.md
- одна строка на правило с идентификатором, как требует META-19: форма
правила, схема префиксов, META-20/META-21, выбор оси, оформление файла
- зафиксирован стиль коммитов и то, что README описывает текущее
устройство, а TODO.md — площадка для обсуждения, а не решения