второе условие ДОЛЖЕН ослаблено до воспроизводимости вердикта
- META-6 переписан: ступень требует не машинной проверки, а того, чтобы двое проверяющих по тексту правила выносили один вердикт; проверяющий по умолчанию — читатель, человек или агент - заведён META-27: машинная проверка желательна везде, где пишется, но ступени не задаёт — иначе канон стоит в СЛЕДУЕТ до появления скриптов; обоснование META-25 пересобрано на новом условии - LANGUAGE.md и CLAUDE.md приведены к той же формулировке, вопрос 1 из TODO закрыт, остальные перенумерованы
This commit is contained in:
@@ -4,38 +4,12 @@
|
||||
решения. Закрытый вопрос отсюда удаляется — принятое решение живёт в
|
||||
`README.md`, `GUIDE.md` или `LANGUAGE.md`, а не в этом файле.
|
||||
|
||||
Две секции: сначала язык и подход, потом канон с тулингом. Пункты 1–9
|
||||
Две секции: сначала язык и подход, потом канон с тулингом. Пункты 1–8
|
||||
пришли из внешнего ревью описания языка и проверены по файлам на месте.
|
||||
|
||||
# Язык и подход
|
||||
|
||||
## 1. Два определения второго условия ДОЛЖЕН, и META-6 не соблюдается
|
||||
|
||||
Противоречие двойное, и это самое серьёзное из найденного.
|
||||
|
||||
**Расхождение формулировок.** `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. Граница правила не определена
|
||||
## 1. Граница правила не определена
|
||||
|
||||
Форма объявляет четыре части, но почти каждое крупное правило несёт абзацы
|
||||
**после** блока ПОЧЕМУ: 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`, зарезервированные как раз под
|
||||
то, что каноном не занято.
|
||||
|
||||
## 4. «Тема» — несущий идентификатор без определения и реестра
|
||||
## 3. «Тема» — несущий идентификатор без определения и реестра
|
||||
|
||||
META-21 велит ссылаться на соседнюю конвенцию именем темы, манифест
|
||||
подписывается `topics = ["time", …]`, сборка собирает файл темы из слоёв —
|
||||
@@ -87,13 +61,13 @@ META-21 велит ссылаться на соседнюю конвенцию
|
||||
файла темы тихо осиротит все текстовые ссылки во всех копиях.
|
||||
|
||||
Вопрос уже не гипотетический: пара `arch/db-identifiers.md` против
|
||||
`lang/go/db-schema.md` (см. вопрос 13) показывает, что имена слоёв одной
|
||||
`lang/go/db-schema.md` (см. вопрос 12) показывает, что имена слоёв одной
|
||||
темы могут не совпадать. Смежно: `extends: arch/time.md` у SLOG ломает
|
||||
гарантию META-24 («базовый слой отсутствовать не может») — она верна только
|
||||
для базы своей темы, а машинной проверке негде узнать тему, кроме имени
|
||||
файла.
|
||||
|
||||
## 5. GUIDE выведен из-под проверок ложным основанием
|
||||
## 4. GUIDE выведен из-под проверок ложным основанием
|
||||
|
||||
`LANGUAGE.md` исключает обвязку из проверок формулировкой «она ключевые слова
|
||||
цитирует, а не употребляет». Для `GUIDE.md` это неверно: META-правила
|
||||
@@ -109,7 +83,7 @@ META-21 велит ссылаться на соседнюю конвенцию
|
||||
Честнее развести: `GUIDE.md` язык **употребляет** и проверяется как
|
||||
конвенция, `LANGUAGE.md` и `README.md` — цитируют.
|
||||
|
||||
## 6. МЕХАНИЗИРОВАНО не переживает нового подписчика
|
||||
## 5. МЕХАНИЗИРОВАНО не переживает нового подписчика
|
||||
|
||||
META-8 запрещает удалять норму, пока механизирована не у всех, и защищает
|
||||
тем самым потребителей, существующих **на момент удаления**. Будущих не
|
||||
@@ -127,7 +101,7 @@ META-8 запрещает удалять норму, пока механизир
|
||||
в тексте канона, то есть ровно то, что запрещает META-4. Либо это законное
|
||||
исключение, и тогда его надо назвать, либо конфликт.
|
||||
|
||||
## 7. Семантика ключевых слов в копию не едет
|
||||
## 6. Семантика ключевых слов в копию не едет
|
||||
|
||||
Строка о версии языка перечисляет слова, но не их значения, а всё
|
||||
нетривиальное в шкале живёт только в `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` из
|
||||
BCP 14 и списки эквивалентных словесных форм ISO Directives.
|
||||
|
||||
## 10. Одиннадцать таблиц не прочитаны на взаимоисключительность
|
||||
## 9. Одиннадцать таблиц не прочитаны на взаимоисключительность
|
||||
|
||||
`LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по
|
||||
умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы
|
||||
@@ -193,7 +167,7 @@ BCP 14 и списки эквивалентных словесных форм IS
|
||||
Работа читательская, машине не даётся; в список проверок она уже записана в
|
||||
разделе «Чтением, потому что машине не даётся».
|
||||
|
||||
## 11. Описание языка отдельно от набора конвенций
|
||||
## 10. Описание языка отдельно от набора конвенций
|
||||
|
||||
`LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции;
|
||||
`conventions/` — **один конкретный** набор. Сейчас они склеены в одном
|
||||
@@ -216,7 +190,7 @@ BCP 14 и списки эквивалентных словесных форм IS
|
||||
|
||||
# Канон, тулинг, подключение
|
||||
|
||||
## 12. Тулинг: две разные задачи в одном `conv`
|
||||
## 11. Тулинг: две разные задачи в одном `conv`
|
||||
|
||||
Сейчас в `conv` смешаны две категории работы, и они расходятся по всему —
|
||||
по частоте запуска, по тому, кто запускает, и по тому, что считается
|
||||
@@ -247,22 +221,22 @@ BCP 14 и списки эквивалентных словесных форм IS
|
||||
ссылках: это установка, а не целостность, но список подписок ему нужен из
|
||||
манифеста.
|
||||
|
||||
Часть проверок из этого списка сейчас нереализуема по причинам из вопросов 2
|
||||
и 8, так что порядок такой: сначала язык, потом чекер.
|
||||
Часть проверок из этого списка сейчас нереализуема по причинам из вопросов 1
|
||||
и 7, так что порядок такой: сначала язык, потом чекер.
|
||||
|
||||
Перед тем как переписывать, стоит посмотреть на два готовых прототипа:
|
||||
дистрибуцию пакетов Vale (`.vale.ini` → `vale sync` → `styles/`) как образец
|
||||
манифеста и `vendir.yml` — как пример того, где проходит граница между «чего
|
||||
хочу» и «что получил».
|
||||
|
||||
## 13. Пары слоёв и темы без базы
|
||||
## 12. Пары слоёв и темы без базы
|
||||
|
||||
Отложено сознательно, но список стоит держать перед глазами:
|
||||
|
||||
- `SLOG` объявляет `extends: arch/time.md` — расширение **чужой** темы.
|
||||
Сборщик темы `logging` на это наткнётся: базового слоя с темой `logging`
|
||||
нет, а `arch/time.md` он тянуть не должен. Чинится переводом в обычную
|
||||
ссылку «связано». Вдобавок это ломает гарантию META-24 — см. вопрос 4.
|
||||
ссылку «связано». Вдобавок это ломает гарантию META-24 — см. вопрос 3.
|
||||
- Темы без арх-слоя: `db-schema`, `errors`, `web-ui`. Собираются в файл с
|
||||
одной секцией — само по себе не ломается, но это и есть тот невыделенный
|
||||
арх-слой из известного долга.
|
||||
@@ -274,7 +248,7 @@ BCP 14 и списки эквивалентных словесных форм IS
|
||||
- Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из
|
||||
`web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне.
|
||||
|
||||
## 14. Подключение к репозиториям
|
||||
## 13. Подключение к репозиториям
|
||||
|
||||
Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server.
|
||||
Понадобится: заполнить локальную часть копий тем, что сейчас в этих
|
||||
@@ -283,7 +257,7 @@ BCP 14 и списки эквивалентных словесных форм IS
|
||||
строка в `AGENTS.md` каждого потребителя про то, что файлы в
|
||||
`docs/conventions/` — копии.
|
||||
|
||||
## 15. Тулинг на Go, живущий независимо
|
||||
## 14. Тулинг на Go, живущий независимо
|
||||
|
||||
Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в
|
||||
одном репозитории и правятся одним движением. Мысль: вынести в отдельный
|
||||
@@ -292,10 +266,10 @@ Go-бинарь со своим релизным циклом, ставить ч
|
||||
|
||||
Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править
|
||||
инструмент «заодно» с правкой конвенции, работает против **любого** канона и
|
||||
любого потребителя — что прямо требуется вопросом 11, — и снимает питон из
|
||||
любого потребителя — что прямо требуется вопросом 10, — и снимает питон из
|
||||
зависимостей репозиториев-потребителей.
|
||||
|
||||
Порядок обратный ожидаемому: пока вопрос 11 не сделан, инструмент всё равно
|
||||
Порядок обратный ожидаемому: пока вопрос 10 не сделан, инструмент всё равно
|
||||
работает против одного конкретного канона, и независимый релизный цикл ему
|
||||
нечего обслуживать. Сначала 11, потом 15. Разделение из вопроса 12 при этом
|
||||
нечего обслуживать. Сначала 10, потом 14. Разделение из вопроса 11 при этом
|
||||
дешевле заложить сразу, чем отпиливать потом.
|
||||
|
||||
Reference in New Issue
Block a user