закрыты известные остатки

- документ самоуправления объявляется ключом governance, а не угадывается
  по «он один и без ключей оси»: конвенция, потерявшая topic, была от него
  неотличима и тихо теряла все проверки об отъезде к потребителю
- проверка путей канона больше не ловит README.md и READING.md — эти два
  имени значат что-то и на стороне потребителя
- lang.Recognize требует совпадения и слов, и номера версии; директории
  компонентов сверяются на вложенность, а не только на равенство
- у обеих проверок появился --json, а convy sync называет ссылки на темы,
  которых компонент не взял
This commit is contained in:
av
2026-07-28 10:16:27 +03:00
parent 29d29740f5
commit 600aba5ee3
16 changed files with 413 additions and 70 deletions
+12 -26
View File
@@ -86,6 +86,12 @@ internal/cli команды, диалог, два режима
которую можно читать. Транспортов два, но `Kind` — перечисление, а не булево:
третий (rclone, дерево по https) ожидается, и отказ обязан сначала сказать,
чем ссылку сочли, и только потом — что не так.
- **Документ самоуправления объявлен, а не угадан.** `governance` в манифесте
называет файл, который написан языком конвенций, но не принадлежит теме.
Угадывание пробовали — «он один» и «у него нет ключей оси» верны и для
набора, у которого единственная конвенция потеряла `topic`, а потеря эта
дорогая: файл сохраняет все проверки формы и тихо теряет все проверки об
отъезде к потребителю.
- **Проверки формы не знают про набор.** `checkRules`, `checkVersionLine`,
`checkModalsOutside` и прочие принимают `lang.Vocabulary`, а не `*suite.Suite`
— иначе `convy check` в проекте пришлось бы писать заново. Копия несёт язык
@@ -164,34 +170,14 @@ internal/cli команды, диалог, два режима
## Известные остатки
- Набор без документа самоуправления, в котором конвенция потеряла `topic`,
проскочит: признаков «этот документ один» и «у него нет ключей слоя» не
хватает. Закрывается маркером в манифесте — правка формата, не сделана.
- Проверка пути канона считает путём любой токен `*.md`, который резолвится в
файл набора; упоминание `README.md` в конвенции она пометит ошибочно. На
текущем каноне не срабатывает.
- Машиночитаемого вывода находок (`--json`) нет.
- Предупреждения о висячей ссылке на неподписанную тему нет: `convy check` до
набора не дотягивается и разрешает только ссылки на префиксы самого файла.
Закрывается отдельной командой, а не этой: ей нужен список подписок.
- Набор в поддиректории git-репозитория не адресуется: `#рев` есть, `//путь`
нет. Появится вместе с первым набором, который так лежит.
нет. Синтаксис, которого не просит ни один набор, не заводится заранее.
- Источник у проекта один. Модель нескольких допускает; форма `source = "..."`
расширяется до `[sources.имя]` не ломая существующие манифесты.
- `convy add` пишет подписку после сборкиесли сборка прошла, а запись в
манифест упала, копия останется неучтённой. Обратный порядок хуже: подписка
без файла отправляет следующий `pull` искать то, чего не делали.
- Директории компонентов сверяются на равенство, а не на вложенность. Компонент
в `docs` и компонент в `docs/sub` манифест пропустит; `convy check` от
двойных находок защищён отдельно (`distinct`).
- `lang.Recognize` при отсутствии словаря с совпавшим номером версии отдаёт
первого кандидата, у которого совпали слова. Пока версия в реестре одна, это
безвредно; со второй версией того же естественного языка станет неверно.
- Опечатка `convey` вместо `convy` в текстах ничем не ловится. Слова отличаются
одной буквой, и оба выглядят словами.
- Способ раздачи готовых бинарей не выбран. `eget` умеет релизы GitHub, а git
здесь свой (`git.vakhrushev.me`) — тянет ли он релизы Gitea, не проверено;
иначе остаются прямой URL или `go install`.
расширяется до `[sources.имя]`, не ломая существующие манифесты.
- `convy add` пишет подписку после сборки. Если сборка прошла, а запись упала,
копия останется неучтённой — но это уже поправимо: `convy sync` её либо
уберёт, либо соберёт заново, когда тему подпишут.
- Ни линтеров, ни CI. Раздача — `go install`, пока этого хватает.
## Тесты