- заведён internal/source: уровни ссылаются друг на друга путём на диске
или git-репозиторием, ревизия закрепляется хвостом #ref; клон делается
заново и удаляется, кэша нет
- добавлены init, add, pull, list, check в проекте — манифест
.conventions.toml, сборка копий по разу на компонент, маркер локальной
части, READING.md рядом
- проверки формы развязаны с набором: принимают lang.Vocabulary, а язык
копии узнаётся по строке о версии — манифеста рядом с ней нет
- README описывает термины, команды, два режима и вывод проверки; модель не
пересказывается — истина остаётся в репозитории набора
- CLAUDE.md фиксирует распределение языков, инварианты кода и решения, которые
уже приняты и не пересматриваются без просьбы
- отдельным разделом перечислены известные остатки, чтобы их не искали заново
- suite rule дописывает правило: номер берётся следующим за наибольшим, блоки
раскладываются в порядке норма, ПОЧЕМУ, ПРИМЕРЫ, --after ставит правило рядом
с тем, которое оно уточняет
- ступень называется категорией (requirement, prohibition, ...), а не словом
языка, поэтому вызывающему не нужно знать, на каком языке записан набор
- suite list показывает темы со слоями, а с осью — что возьмёт компонент; отбор
слоёв вынесен в suite.Assemble, откуда его возьмут проектные команды
- слои темы теперь всегда возвращаются базовым вперёд
- suite retire снимает правило, конвенцию или тему: правило остаётся заглушкой
с датой и причиной, имя уезжает в раздел выбывших, снятие с непогашенными
ссылками отклоняется с перечнем мест
- добавлена проверка META-30: короткое описание языка обязано называть все
слова словаря, иначе читатель копии толкует их по памяти
- retired-раздел манифеста больше не считается объявлением пути: снятый
префикс означает, что файл ушёл вместе с ним
- suite init создаёт директорию и манифест со скелетом таблиц; suite add пишет
файл конвенции и вправляет запись в suite.toml, сохраняя комментарии
- без аргументов команды спрашивают поля с подсказками, с флагами берут всё
сразу и не спрашивают ничего; без терминала пустой вызов отказывает
- строка о версии языка генерируется из словаря набора, поэтому созданный файл
проходит suite check без правок
- починено разрешение extends: короткая форма бралась по суффиксу и могла
указать на сам файл; теперь неоднозначность либо избегается при записи, либо
сообщается ошибкой
- ссылка на слой своей темы с объявленной осью — ошибка где угодно, а не только
в норме: гарантированно присутствует в копии один базовый слой
- ссылки на чужую тему вне нормы остаются разрешёнными по META-20
- документ без темы: ошибка, если такой не один или если он несёт ключи слоя —
иначе конвенция, потерявшая topic, молча лишалась всех проверок распространения
- иерархия заголовков: один заголовок первого уровня, без перескоков через уровень
- имя темы: латиница и пригодность для имени файла — ошибкой, kebab-case —
предупреждением
- сценарные связки чужого словаря ловятся в начале строки, где их ставит
сценарный блок, а не в середине фразы, где это чаще SQL
- комментарии, тексты ошибок, вывод CLI и сообщения тестов теперь на английском
- по-русски остались только литералы словаря ru и содержимое фикстур: это
данные под проверкой, а не текст инструмента
- согласование числительных в итоге упростилось до английского plural
- заголовок правило объявляет, а не ссылается на него: при опечатке в префиксе
одна ошибка формы давала вторую находку о неразрешённой ссылке
- числительные в итоге согласованы с существительным
- разбор документа по языку конвенций: шапка, области правил, блоки под метками
- проверки формы правила, распространения, ссылок и самого suite.toml
- словарь языка живёт в бинаре реестром «версия × естественный язык», темы и
префиксы берутся только из манифеста