- добавлен ключ governance: без него конвенция, потерявшая topic, была
неотличима от GUIDE.md и тихо теряла проверки об отъезде к потребителю
- комментарии из манифеста убраны — их всё равно съела бы первая же
команда; то, чего не было в README.md, дописано туда
- 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:
- родовое «манифест» заменено именем уровня: файл в наборе описывает сам
набор, файл в проекте — подключённые конвенции, и каждый назван по тому,
что описывает
- по имени рядом лежащего манифеста определяется контекст: suite.toml —
набор, .conventions.toml — проект; в TOOL.md решение зафиксировано, из
открытых вопросов убрано
- заведён READING.md: словарь со значениями, форма правила и её граница,
ссылки, локальная часть — без разделов о ведении набора и без META-ссылок,
примеры на X-префиксах
- сборщик кладёт его в docs/conventions/ и перезаписывает целиком; в манифест
набора добавлена секция [language] с версией и двумя документами
- META-30: правка словаря или состава частей правила доходит до READING.md,
иначе потребитель толкует ДОПУСКАЕТСЯ по прежней версии
- META-9 снят: удаление оставляло подписчика, пришедшего после, без нормы и
без проверки, а «механизировано у всех» канону не проверить — списка
подписчиков у него нет по построению
- META-8 переписан в запрет: норма остаётся в правиле, чем бы её ни
проверяли; линтер сообщает, что нарушено, но не что требуется (META-6)
- МЕХАНИЗИРОВАНО объявлена свойством репозитория: в тексте конвенции отметки
нет, её место — запись о механизации ниже маркера (META-7)
- тема — набор правил об одном фокусе разработки, имя латиницей (нижний
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
- метка обоснования пишется заглавными и вошла в словарь набора: скелет
правила теперь целиком из ключевых слов, а не смесь `**ДОЛЖЕН.**` и
`**Почему.**`; в переводе на другой язык метка меняется как остальные слова
(ПОЧЕМУ / WHY), 235 вхождений заменены
- метки правила выделены из шкалы в отдельный перечень: ПОЧЕМУ и
МЕХАНИЗИРОВАНО обязательности не задают, а размечают части, и стандартом не
даются ни в одном языке — раньше МЕХАНИЗИРОВАНО висело строкой в таблице
модальности
- версия языка поднята до 2, потому что изменение формы меняет чтение уже
написанного текста; строка о версии в двенадцати конвенциях перечисляет
теперь и метки, а служебные слова сценария в неё по-прежнему не входят
- 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` в префиксе
зарезервирована за локальными правилами потребителей
- реестр покрывает и обвязку тоже (GUIDE.md), поэтому внутри conventions/
он упирался в путь `../GUIDE.md`; теперь пути даются от корня репозитория
- README дополнен разделом про префиксы и строкой в таблице обвязки
- LANGUAGE.md: раздел «Идентификаторы» переписан под префиксы, в список
машинных проверок добавлена сверка с реестром
- GUIDE.md перенумерован под префикс META, «номер правила» заменён на
«идентификатор»
- сами конвенции переехали в conventions/, описательное — в корень:
LANGUAGE.md (язык записи) и GUIDE.md (как ведут конвенции)
- conv синхронизирует только conventions/, пути в origin даются
относительно неё — раскладка копий в репозиториях не меняется
- 13 конвенций по осям arch / lang / stack / common; репозитории берут
оттуда копии в свой docs/conventions/ и коммитят их у себя
- conv — синхронизация копий: add / status / diff / pull / push, локальные
регионы исключены из сравнения, поэтому расхождение не даёт шума