второе условие ДОЛЖЕН ослаблено до воспроизводимости вердикта

- META-6 переписан: ступень требует не машинной проверки, а того, чтобы
  двое проверяющих по тексту правила выносили один вердикт; проверяющий по
  умолчанию — читатель, человек или агент
- заведён META-27: машинная проверка желательна везде, где пишется, но
  ступени не задаёт — иначе канон стоит в СЛЕДУЕТ до появления скриптов;
  обоснование META-25 пересобрано на новом условии
- LANGUAGE.md и CLAUDE.md приведены к той же формулировке, вопрос 1 из
  TODO закрыт, остальные перенумерованы
This commit is contained in:
av
2026-07-26 15:01:51 +03:00
parent 7b2869d3a4
commit 4943bf1dd2
4 changed files with 84 additions and 76 deletions
+7 -5
View File
@@ -28,8 +28,8 @@ code in this repository.
- Нормативно только заглавное написание (правило RFC 8174): строчное - Нормативно только заглавное написание (правило RFC 8174): строчное
«должен» в прозе нормой не является. «должен» в прозе нормой не является.
- ДОЛЖЕН требует двух условий сразу: назван вред от нарушения (META-25) и - ДОЛЖЕН требует двух условий сразу: назван вред от нарушения (META-25) и
норма проверяема машиной (META-6). Проверяемость сама по себе до ДОЛЖЕН не вердикт о нарушении воспроизводим (META-6). Воспроизводимость сама по себе
повышает — иначе шкала наполняется проверяемыми мелочами. до ДОЛЖЕН не повышает — иначе шкала наполняется проверяемыми мелочами.
- ДОПУСКАЕТСЯ адресовано рецензенту: помеченный им выбор на ревью не - ДОПУСКАЕТСЯ адресовано рецензенту: помеченный им выбор на ревью не
обсуждается. обсуждается.
- **МЕХАНИЗИРОВАНО** — не модальность, а способ проверки: отметка стоит - **МЕХАНИЗИРОВАНО** — не модальность, а способ проверки: отметка стоит
@@ -93,9 +93,11 @@ code in this repository.
- META-5: расхождение кода с правилом — отступление, а не повод переписать - META-5: расхождение кода с правилом — отступление, а не повод переписать
правило. Направление всегда конвенция → код; факт «в приложении уже иначе» правило. Направление всегда конвенция → код; факт «в приложении уже иначе»
не является аргументом. не является аргументом.
- META-6: ДОЛЖЕН без механической проверки либо механизируется, либо - META-6: ДОЛЖЕН требует воспроизводимого вердикта — двое проверяющих по
понижается в СЛЕДУЕТ. Правило, непроверяемое машиной в принципе (вкус тексту правила отвечают одинаково. Правило, вердикт которого зависит от
формулировки, суждение о ситуации), — СЛЕДУЕТ по построению. суждения (вкус формулировки, уместность в конкретном месте), — СЛЕДУЕТ по
построению. META-27: машинная проверка желательна, но ступени не задаёт;
проверяющий по умолчанию — читатель правила, человек или агент.
- META-10: блок ПОЧЕМУ не удаляется никогда, в том числе после того, как - META-10: блок ПОЧЕМУ не удаляется никогда, в том числе после того, как
норма уехала в линтер. норма уехала в линтер.
- META-1: один файл — ровно один повторяющийся выбор. META-2: конвенция - META-1: один файл — ровно один повторяющийся выбор. META-2: конвенция
+36 -18
View File
@@ -157,33 +157,51 @@ prefix: META
переписывает его снова. Направление «конвенция → код» держится ровно тем, переписывает его снова. Направление «конвенция → код» держится ровно тем,
что факт не считается аргументом. что факт не считается аргументом.
### META-6. `ДОЛЖЕН` без механической проверки либо механизируется, либо понижается ### META-6. Высшая модальность требует воспроизводимого вердикта
**ДОЛЖЕН.** Правило, нарушение которого объявлено ошибкой, получает **ДОЛЖЕН.** Правило со ступенью ДОЛЖЕН или НЕ ДОЛЖЕН формулируется так, что
машинную проверку или переводится в СЛЕДУЕТ. двое проверяющих по одному его тексту выносят один и тот же вердикт.
**ПОЧЕМУ.** Без проверки правило держится на внимании: нарушения копятся **ПОЧЕМУ.** Проверяют конвенцию в первую очередь агент и человек — они читают
молча и всплывают выборочно — на том ревью, куда дошли руки. Для СЛЕДУЕТ текст правила и по нему смотрят код. Проверка, стало быть, есть у каждого
это честно, а ДОЛЖЕН при этом обещает то, чего не делает, и через несколько правила с первого дня, и её инструмент — формулировка, а не скрипт. Отсюда
таких случаев обесценивает остальные ДОЛЖЕН в файле. цена невоспроизводимой нормы: вердикт зависит от того, кто читал, нарушения
всплывают выборочно, а отступление нечем записать — неизвестно, нарушено ли.
Для СЛЕДУЕТ это честно, там суждение и есть содержание правила; ДОЛЖЕН в
таком виде обещает то, чего не делает, и через несколько случаев обесценивает
остальные ДОЛЖЕН в файле.
Отсюда следствие: правило, машинная проверка которого невозможна в принципе Отсюда следствие: правило, вердикт которого зависит от суждения по построению
(вкус формулировки, выбор границы, суждение о ситуации), не может быть (вкус формулировки, выбор границы, уместность в конкретном месте), не может
ДОЛЖЕН — его модальность СЛЕДУЕТ по построению, а не по слабости. быть ДОЛЖЕН — его модальность СЛЕДУЕТ по природе нормы, а не по слабости.
### META-25. Высшая модальность выбирается, только когда назван вред ### META-25. Высшая модальность выбирается, только когда назван вред
**СЛЕДУЕТ.** Правило получает ДОЛЖЕН или НЕ ДОЛЖЕН, если в обосновании **СЛЕДУЕТ.** Правило получает ДОЛЖЕН или НЕ ДОЛЖЕН, если в обосновании
сказано, что́ ломается при нарушении. сказано, что́ ломается при нарушении.
**ПОЧЕМУ.** Машинная проверка — условие необходимое (META-6), но не **ПОЧЕМУ.** Воспроизводимость вердикта — условие необходимое (META-6), но не
достаточное: проверяемых мелочей больше, чем важных вещей, и без второго достаточное: воспроизводимо проверяемых мелочей больше, чем важных вещей, и
условия единственным фильтром остаётся удобство проверки. Шкала наполняется без второго условия единственным фильтром остаётся удобство проверки. Шкала
опрятностью, читатель перестаёт отличать «уронит прод» от «неаккуратно» — и наполняется опрятностью, читатель перестаёт отличать «уронит прод» от
обесцениваются все ДОЛЖЕН в файле, ровно то, от чего META-6 защищает с «неаккуратно» — и обесцениваются все ДОЛЖЕН в файле, ровно то, от чего META-6
другой стороны. Само это правило машиной не проверяется: «вред назван» защищает с другой стороны. Собственная ступень этого правила — СЛЕДУЕТ:
устанавливается чтением, поэтому его собственная модальность по META-6 — форма обоснования ничем не ограничена, поэтому «вред назван» вердикта не
СЛЕДУЕТ. даёт — один читатель увидит названный вред там, где другой увидит объяснение
мотива.
### META-27. Механизация правила желательна, но ступени не задаёт
**СЛЕДУЕТ.** Правило со ступенью ДОЛЖЕН получает машинную проверку, когда
такую проверку можно написать.
**ПОЧЕМУ.** Линтер не забывает, ничего не стоит на каждом прогоне и краснеет
до ревью, а не на нём: там, где проверка пишется, она дешевле самого
внимательного чтения, и путь «находка → конвенция → проверка → удаление
прозы» кончается ею (META-9). Условием ступени она при этом не является:
проверяющий по умолчанию — читатель правила (META-6), а если требовать
скрипт, весь канон стоит в СЛЕДУЕТ до того дня, когда скрипты появятся.
Ступень говорит о важности нормы, а не о состоянии инструментов.
### META-7. Факт механизации фиксируется в копии со ссылкой на правило ### META-7. Факт механизации фиксируется в копии со ссылкой на правило
+19 -5
View File
@@ -162,13 +162,14 @@ Directives, Part 2, по одной форме записи на ступень,
1. нарушение причиняет названный вред, а не расходится со вкусом — META-25, 1. нарушение причиняет названный вред, а не расходится со вкусом — META-25,
он же критерий BCP 14, где высшая модальность резервируется под то, что он же критерий BCP 14, где высшая модальность резервируется под то, что
действительно ломается, и не употребляется для навязывания метода; действительно ломается, и не употребляется для навязывания метода;
2. норма проверяема машиной — META-6, иначе обязательность держится на 2. вердикт о нарушении воспроизводим — META-6: по тексту правила двое
внимании и обещает то, чего не делает. проверяющих приходят к одному ответу, иначе обязательность держится на
том, кто читал.
Не выполнено первое — правилу место в СЛЕДУЕТ или нигде. Не выполнено Не выполнено первое — правилу место в СЛЕДУЕТ или нигде. Не выполнено
второе — в СЛЕДУЕТ. Проверяемость сама по себе не повышает правило до второе — в СЛЕДУЕТ. Воспроизводимость сама по себе не повышает правило до
ДОЛЖЕН: механически проверяемых мелочей больше, чем важных вещей, и ДОЛЖЕН: проверяемых мелочей больше, чем важных вещей, и безразборное
безразборное повышение обесценивает шкалу быстрее, чем её отсутствие. повышение обесценивает шкалу быстрее, чем её отсутствие.
Модальность живёт на **правиле**, а не на файле. Файловый статус Модальность живёт на **правиле**, а не на файле. Файловый статус
(`status: рекомендуемая` / `обязательная` в шапке) не используется: он (`status: рекомендуемая` / `обязательная` в шапке) не используется: он
@@ -249,6 +250,19 @@ Directives, Part 2, по одной форме записи на ступень,
правило обязательно, а о том, чем эта обязательность обеспечена. В 29148 это правило обязательно, а о том, чем эта обязательность обеспечена. В 29148 это
два разных атрибута требования, и здесь тоже два. два разных атрибута требования, и здесь тоже два.
**Проверяющий по умолчанию — читатель правила**, человек или агент. Канон
пишется прежде всего под агента: он читает конвенцию и по ней смотрит код,
то есть проверка есть у каждого правила с первого дня, и её инструмент —
формулировка нормы. Поэтому вторым условием ДОЛЖЕН стоит воспроизводимость
вердикта (META-6), а не наличие скрипта: ступень говорит о важности нормы и о
том, сколько внимания она получает при проверке, а не о состоянии
инструментов. Линтер сильнее чтения — он не забывает, ничего не стоит на
каждом прогоне и краснеет до ревью, — поэтому механизация желательна везде,
где проверка пишется (META-27), и остаётся концом пути «находка → конвенция →
проверка → удаление прозы». Но обязательным условием высшей ступени она не
является: иначе весь канон стоял бы в СЛЕДУЕТ до появления скриптов, которых
пока нет ни одного.
Когда правило механизировано у всех потребителей, его норма из канона Когда правило механизировано у всех потребителей, его норма из канона
удаляется, а модальность и обоснование остаются: удаляется, а модальность и обоснование остаются:
+22 -48
View File
@@ -4,38 +4,12 @@
решения. Закрытый вопрос отсюда удаляется — принятое решение живёт в решения. Закрытый вопрос отсюда удаляется — принятое решение живёт в
`README.md`, `GUIDE.md` или `LANGUAGE.md`, а не в этом файле. `README.md`, `GUIDE.md` или `LANGUAGE.md`, а не в этом файле.
Две секции: сначала язык и подход, потом канон с тулингом. Пункты 1–9 Две секции: сначала язык и подход, потом канон с тулингом. Пункты 1–8
пришли из внешнего ревью описания языка и проверены по файлам на месте. пришли из внешнего ревью описания языка и проверены по файлам на месте.
# Язык и подход # Язык и подход
## 1. Два определения второго условия ДОЛЖЕН, и META-6 не соблюдается ## 1. Граница правила не определена
Противоречие двойное, и это самое серьёзное из найденного.
**Расхождение формулировок.** `LANGUAGE.md` требует, чтобы норма была
«проверяема машиной» — то есть проверяема в принципе. META-6 требует, чтобы
она «получала машинную проверку» — то есть фактически. Ни одной проверки не
реализовано, поэтому по первому чтению канон в порядке, по второму — весь в
нарушении. Автору нового правила нечем ответить на вопрос «можно ли ДОЛЖЕН
до того, как написан линтер, и как долго».
**Следствие META-6 массово не соблюдается.** «Правило, непроверяемое машиной
в принципе, — СЛЕДУЕТ по построению», а ДОЛЖЕН стоит у META-1 («ровно один
повторяющийся выбор» — суждение), META-5 («неверно по существу» — суждение),
META-13, META-15, SLOG-8 («уровень выбирается по адресату»), CONF-9
(«комментарий, из которого ясно»). META-25 при этом демонстративно понижает
**себя** до СЛЕДУЕТ по этой же логике: критерий известен и применяется
выборочно.
Развилка: либо следствие META-6 слишком сильное и его надо ослабить явно —
например, различив «проверяемо машиной» и «проверяемо воспроизводимо, в том
числе чтением», — либо половина ДОЛЖЕН канона стоит не на своей ступени.
Пока непонятно, что из двух, невозможно ни писать новые правила, ни
реализовать проверку META-6: она либо промолчит всегда, либо покраснеет на
всём каноне, и её отключат — ровно сценарий из обоснования META-12.
## 2. Граница правила не определена
Форма объявляет четыре части, но почти каждое крупное правило несёт абзацы Форма объявляет четыре части, но почти каждое крупное правило несёт абзацы
**после** блока ПОЧЕМУ: KEYS-5, SLOG-25, MIGR-11, GERR-26. Язык не говорит, **после** блока ПОЧЕМУ: KEYS-5, SLOG-25, MIGR-11, GERR-26. Язык не говорит,
@@ -55,7 +29,7 @@ META-13, META-15, SLOG-8 («уровень выбирается по адрес
Решить надо две вещи: где кончается правило и что делать с нормами, которые Решить надо две вещи: где кончается правило и что делать с нормами, которые
уже сидят в хвостах. уже сидят в хвостах.
## 3. Примеры в LANGUAGE.md сидят на живых идентификаторах ## 2. Примеры в LANGUAGE.md сидят на живых идентификаторах
Учебные примеры используют настоящие префиксы канона с номерами, которые в Учебные примеры используют настоящие префиксы канона с номерами, которые в
каноне означают другое: каноне означают другое:
@@ -74,7 +48,7 @@ META-13, META-15, SLOG-8 («уровень выбирается по адрес
Лечится дёшево: примеры берут префиксы на `X`, зарезервированные как раз под Лечится дёшево: примеры берут префиксы на `X`, зарезервированные как раз под
то, что каноном не занято. то, что каноном не занято.
## 4. «Тема» — несущий идентификатор без определения и реестра ## 3. «Тема» — несущий идентификатор без определения и реестра
META-21 велит ссылаться на соседнюю конвенцию именем темы, манифест META-21 велит ссылаться на соседнюю конвенцию именем темы, манифест
подписывается `topics = ["time", …]`, сборка собирает файл темы из слоёв — подписывается `topics = ["time", …]`, сборка собирает файл темы из слоёв —
@@ -87,13 +61,13 @@ META-21 велит ссылаться на соседнюю конвенцию
файла темы тихо осиротит все текстовые ссылки во всех копиях. файла темы тихо осиротит все текстовые ссылки во всех копиях.
Вопрос уже не гипотетический: пара `arch/db-identifiers.md` против Вопрос уже не гипотетический: пара `arch/db-identifiers.md` против
`lang/go/db-schema.md` (см. вопрос 13) показывает, что имена слоёв одной `lang/go/db-schema.md` (см. вопрос 12) показывает, что имена слоёв одной
темы могут не совпадать. Смежно: `extends: arch/time.md` у SLOG ломает темы могут не совпадать. Смежно: `extends: arch/time.md` у SLOG ломает
гарантию META-24 («базовый слой отсутствовать не может») — она верна только гарантию META-24 («базовый слой отсутствовать не может») — она верна только
для базы своей темы, а машинной проверке негде узнать тему, кроме имени для базы своей темы, а машинной проверке негде узнать тему, кроме имени
файла. файла.
## 5. GUIDE выведен из-под проверок ложным основанием ## 4. GUIDE выведен из-под проверок ложным основанием
`LANGUAGE.md` исключает обвязку из проверок формулировкой «она ключевые слова `LANGUAGE.md` исключает обвязку из проверок формулировкой «она ключевые слова
цитирует, а не употребляет». Для `GUIDE.md` это неверно: META-правила цитирует, а не употребляет». Для `GUIDE.md` это неверно: META-правила
@@ -109,7 +83,7 @@ META-21 велит ссылаться на соседнюю конвенцию
Честнее развести: `GUIDE.md` язык **употребляет** и проверяется как Честнее развести: `GUIDE.md` язык **употребляет** и проверяется как
конвенция, `LANGUAGE.md` и `README.md` — цитируют. конвенция, `LANGUAGE.md` и `README.md` — цитируют.
## 6. МЕХАНИЗИРОВАНО не переживает нового подписчика ## 5. МЕХАНИЗИРОВАНО не переживает нового подписчика
META-8 запрещает удалять норму, пока механизирована не у всех, и защищает META-8 запрещает удалять норму, пока механизирована не у всех, и защищает
тем самым потребителей, существующих **на момент удаления**. Будущих не тем самым потребителей, существующих **на момент удаления**. Будущих не
@@ -127,7 +101,7 @@ META-8 запрещает удалять норму, пока механизир
в тексте канона, то есть ровно то, что запрещает META-4. Либо это законное в тексте канона, то есть ровно то, что запрещает META-4. Либо это законное
исключение, и тогда его надо назвать, либо конфликт. исключение, и тогда его надо назвать, либо конфликт.
## 7. Семантика ключевых слов в копию не едет ## 6. Семантика ключевых слов в копию не едет
Строка о версии языка перечисляет слова, но не их значения, а всё Строка о версии языка перечисляет слова, но не их значения, а всё
нетривиальное в шкале живёт только в `LANGUAGE.md`, который в репозиторий не нетривиальное в шкале живёт только в `LANGUAGE.md`, который в репозиторий не
@@ -143,7 +117,7 @@ META-8 запрещает удалять норму, пока механизир
копиями короткую выжимку семантики; расширить строку о версии до копиями короткую выжимку семантики; расширить строку о версии до
двух-трёх предложений; или признать ограничение и записать его явно. двух-трёх предложений; или признать ограничение и записать его явно.
## 8. Две «механические» проверки без источника данных ## 7. Две «механические» проверки без источника данных
В списке «разбором текста» стоят два пункта, которые без дополнительного В списке «разбором текста» стоят два пункта, которые без дополнительного
реестра нерешаемы: реестра нерешаемы:
@@ -159,7 +133,7 @@ META-8 запрещает удалять норму, пока механизир
реестр снятых номеров не объявлен частью языка, оба пункта принадлежат реестр снятых номеров не объявлен частью языка, оба пункта принадлежат
списку «чтением». списку «чтением».
## 9. Натяжки в опоре на стандарты ## 8. Натяжки в опоре на стандарты
Три места, где источнику приписано чуть больше, чем в нём есть: Три места, где источнику приписано чуть больше, чем в нём есть:
@@ -178,7 +152,7 @@ META-8 запрещает удалять норму, пока механизир
Остальное в таблице проверку выдержало, включая вторую половину `MAY` из Остальное в таблице проверку выдержало, включая вторую половину `MAY` из
BCP 14 и списки эквивалентных словесных форм ISO Directives. BCP 14 и списки эквивалентных словесных форм ISO Directives.
## 10. Одиннадцать таблиц не прочитаны на взаимоисключительность ## 9. Одиннадцать таблиц не прочитаны на взаимоисключительность
`LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по `LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по
умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы
@@ -193,7 +167,7 @@ BCP 14 и списки эквивалентных словесных форм IS
Работа читательская, машине не даётся; в список проверок она уже записана в Работа читательская, машине не даётся; в список проверок она уже записана в
разделе «Чтением, потому что машине не даётся». разделе «Чтением, потому что машине не даётся».
## 11. Описание языка отдельно от набора конвенций ## 10. Описание языка отдельно от набора конвенций
`LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции; `LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции;
`conventions/`**один конкретный** набор. Сейчас они склеены в одном `conventions/`**один конкретный** набор. Сейчас они склеены в одном
@@ -216,7 +190,7 @@ BCP 14 и списки эквивалентных словесных форм IS
# Канон, тулинг, подключение # Канон, тулинг, подключение
## 12. Тулинг: две разные задачи в одном `conv` ## 11. Тулинг: две разные задачи в одном `conv`
Сейчас в `conv` смешаны две категории работы, и они расходятся по всему — Сейчас в `conv` смешаны две категории работы, и они расходятся по всему —
по частоте запуска, по тому, кто запускает, и по тому, что считается по частоте запуска, по тому, кто запускает, и по тому, что считается
@@ -247,22 +221,22 @@ BCP 14 и списки эквивалентных словесных форм IS
ссылках: это установка, а не целостность, но список подписок ему нужен из ссылках: это установка, а не целостность, но список подписок ему нужен из
манифеста. манифеста.
Часть проверок из этого списка сейчас нереализуема по причинам из вопросов 2 Часть проверок из этого списка сейчас нереализуема по причинам из вопросов 1
и 8, так что порядок такой: сначала язык, потом чекер. и 7, так что порядок такой: сначала язык, потом чекер.
Перед тем как переписывать, стоит посмотреть на два готовых прототипа: Перед тем как переписывать, стоит посмотреть на два готовых прототипа:
дистрибуцию пакетов Vale (`.vale.ini``vale sync``styles/`) как образец дистрибуцию пакетов Vale (`.vale.ini``vale sync``styles/`) как образец
манифеста и `vendir.yml` — как пример того, где проходит граница между «чего манифеста и `vendir.yml` — как пример того, где проходит граница между «чего
хочу» и «что получил». хочу» и «что получил».
## 13. Пары слоёв и темы без базы ## 12. Пары слоёв и темы без базы
Отложено сознательно, но список стоит держать перед глазами: Отложено сознательно, но список стоит держать перед глазами:
- `SLOG` объявляет `extends: arch/time.md` — расширение **чужой** темы. - `SLOG` объявляет `extends: arch/time.md` — расширение **чужой** темы.
Сборщик темы `logging` на это наткнётся: базового слоя с темой `logging` Сборщик темы `logging` на это наткнётся: базового слоя с темой `logging`
нет, а `arch/time.md` он тянуть не должен. Чинится переводом в обычную нет, а `arch/time.md` он тянуть не должен. Чинится переводом в обычную
ссылку «связано». Вдобавок это ломает гарантию META-24 — см. вопрос 4. ссылку «связано». Вдобавок это ломает гарантию META-24 — см. вопрос 3.
- Темы без арх-слоя: `db-schema`, `errors`, `web-ui`. Собираются в файл с - Темы без арх-слоя: `db-schema`, `errors`, `web-ui`. Собираются в файл с
одной секцией — само по себе не ломается, но это и есть тот невыделенный одной секцией — само по себе не ломается, но это и есть тот невыделенный
арх-слой из известного долга. арх-слой из известного долга.
@@ -274,7 +248,7 @@ BCP 14 и списки эквивалентных словесных форм IS
- Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из - Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из
`web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне. `web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне.
## 14. Подключение к репозиториям ## 13. Подключение к репозиториям
Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server. Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server.
Понадобится: заполнить локальную часть копий тем, что сейчас в этих Понадобится: заполнить локальную часть копий тем, что сейчас в этих
@@ -283,7 +257,7 @@ BCP 14 и списки эквивалентных словесных форм IS
строка в `AGENTS.md` каждого потребителя про то, что файлы в строка в `AGENTS.md` каждого потребителя про то, что файлы в
`docs/conventions/` — копии. `docs/conventions/` — копии.
## 15. Тулинг на Go, живущий независимо ## 14. Тулинг на Go, живущий независимо
Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в
одном репозитории и правятся одним движением. Мысль: вынести в отдельный одном репозитории и правятся одним движением. Мысль: вынести в отдельный
@@ -292,10 +266,10 @@ Go-бинарь со своим релизным циклом, ставить ч
Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править
инструмент «заодно» с правкой конвенции, работает против **любого** канона и инструмент «заодно» с правкой конвенции, работает против **любого** канона и
любого потребителя — что прямо требуется вопросом 11, — и снимает питон из любого потребителя — что прямо требуется вопросом 10, — и снимает питон из
зависимостей репозиториев-потребителей. зависимостей репозиториев-потребителей.
Порядок обратный ожидаемому: пока вопрос 11 не сделан, инструмент всё равно Порядок обратный ожидаемому: пока вопрос 10 не сделан, инструмент всё равно
работает против одного конкретного канона, и независимый релизный цикл ему работает против одного конкретного канона, и независимый релизный цикл ему
нечего обслуживать. Сначала 11, потом 15. Разделение из вопроса 12 при этом нечего обслуживать. Сначала 10, потом 14. Разделение из вопроса 11 при этом
дешевле заложить сразу, чем отпиливать потом. дешевле заложить сразу, чем отпиливать потом.