56 Commits
Author SHA1 Message Date
av 271603122d манифест приведён к машинному виду, объявлен governance
- добавлен ключ governance: без него конвенция, потерявшая topic, была
  неотличима от GUIDE.md и тихо теряла проверки об отъезде к потребителю
- комментарии из манифеста убраны — их всё равно съела бы первая же
  команда; то, чего не было в README.md, дописано туда
2026-07-28 10:16:39 +03:00
av 34d53d667d удалены TOOL.md и conv, инструкции переведены на convy
- TOOL.md был стартовой точкой разработки инструмента и свою задачу
  выполнил: решения о нём теперь живут в его собственном репозитории,
  открытые вопросы перенесены туда же
- питоновский conv собран под прежнюю модель копий (зеркальное дерево,
  именованные регионы, origin_hash) и удалён вместе с ней
- команды в README.md переписаны на convy, включая suite-сторону и sync
2026-07-28 10:05:22 +03:00
av 0d335ff58d манифест набора переименован в .conventions-suite.toml
- оба манифеста теперь данные инструмента: он их читает и переписывает
  целиком, комментариев они не держат — точка в начале ставит их рядом
  со служебными файлами, а не среди содержимого репозитория
- прежнее основание из TOOL.md («в наборе файл правится при каждой новой
  теме, и прятать его незачем») отпало: правит его convy
- ссылки в README.md, CLAUDE.md, TOOL.md и TODO.md обновлены
2026-07-28 09:54:52 +03:00
av 9a3a89358f logging: убран extends на чужую тему
- шапка `lang/go/logging.md` объявляла базой `arch/time.md` — копипаста
  из соседнего `lang/go/time.md`, единственного файла с этой базой
- у темы `logging` арх-слоя нет вовсе, расширять было нечего; ключ
  вернётся сам, когда невыделенное ядро уедет в `arch/logging.md`
- `convy suite check` на наборе проходит чисто
2026-07-28 09:48:56 +03:00
av 7fb60828db guide: граница со спекой переписана на тест наблюдаемости вердикта
- «что против как» на пограничных правилах не работает: capability
  проверяется снаружи работающей системы, конвенция — только в исходном
  тексте, и отсюда расходятся направление, распространение и шкала
- добавлен признак для спорного случая: обязательство перед внешним
  потребителем — в спеку, зависимость автора следующего патча — в конвенцию
2026-07-27 08:57:35 +03:00
av 9c86d9f2de компоненты как адресат сборки и плоский набор
- компонент — область репозитория, где выбранные слои действуют
  одновременно; сборка идёт по разу на компонент, у каждого своя директория
  копий, подписка и локальная часть, секции [components.<имя>] в манифесте
- плоский набор описан как низкий конец модели, а не отдельный режим: тема с
  одним слоем собирается копированием, ключи оси и lang/stack не пишутся
- в TODO заведён вопрос о реестре значений осей и судьбе extends:
2026-07-26 22:01:39 +03:00
av 787d0bb5ea guide: имя темы и объявленная ось — META-37, META-38
- META-37: тема называется решением и адресатом, а не ролью части проекта;
  логи сервера и браузера — logging и client-logging, а не суффиксная пара
- META-38: ось слоя объявляется ключами lang/stack в шапке, а не выводится
  из пути — переезд файла между директориями иначе молча менял состав копии
  у каждого потребителя; шапки двенадцати конвенций приведены к правилу
- в список проверок добавлены объявление оси, единственность базового слоя
  и совпадение объявленного с директорией
2026-07-26 22:01:38 +03:00
av 11fc9e1fee guide: заведены критерии границы темы — META-33…META-36
- тема определяется решением, а не веществом (META-33) и нужна потребителю
  целиком (META-34); слой сужает базу, но не отменяет её (META-35), иначе
  это другая тема, а вид приложения называется в области действия (META-36)
- добавлен раздел «Как проверить границу темы»: пять вопросов со ссылками
  на правила, включая META-20; те же строки в CLAUDE.md, а в LANGUAGE.md
  оговорка, что граница темы языку не принадлежит
- в TODO заведён прогон восьми тем по критериям с разбором подозреваемых:
  шесть правил time выносят вердикты чужих тем, logging мешает три страта
2026-07-26 21:25:24 +03:00
av b516bfb02c manifest.toml переименован в suite.toml
- родовое «манифест» заменено именем уровня: файл в наборе описывает сам
  набор, файл в проекте — подключённые конвенции, и каждый назван по тому,
  что описывает
- по имени рядом лежащего манифеста определяется контекст: suite.toml —
  набор, .conventions.toml — проект; в TOOL.md решение зафиксировано, из
  открытых вопросов убрано
2026-07-26 17:06:29 +03:00
av e8fdc98557 заведён TOOL.md — стартовая точка для convy
- имя, термины suite/project, раскладка команд: проектные наверху, ведение
  набора под подкомандой suite, check остаётся общим
- собрано в одном месте то, что инструмент делает и чего не делает: сборка
  копии, три группы проверок, независимость от конкретного набора, отказ от
  слияния, лока и обратного транспорта
- два тулинговых вопроса вынесены из TODO в раздел «Открытые вопросы»;
  вопросы про инструмент там больше не живут
2026-07-26 17:00:00 +03:00
av c96566d4b4 todo: заведён разбор шести сниппетов в блоках нормы
- GCFG-7, GCFG-9, SLOG-20, GTIM-8, HTMX-7, HTMX-24 несут код внутри нормы,
  то есть требуют ровно такой код; с появлением блока ПРИМЕРЫ часть из них
  туда и переезжает
- записана цена ошибки в обе стороны: деталь кода как требование против
  нормы, потерявшей обязательность в иллюстративном блоке
2026-07-26 16:14:26 +03:00
av 59a1c23f55 язык: заведён блок ПРИМЕРЫ
- пятая, необязательная часть правила: код парой «плохо → хорошо» после
  обоснования; метка добавлена в словарь (EXAMPLES) и в строку о версии
  языка во всех тринадцати файлах
- сказано, чем примеры не являются: требований в блоке нет, дословным
  сниппетом он не служит, при расхождении с нормой правят пример
- READING.md обновлён по META-30, в машинные проверки добавлен порядок
  блоков, в читательские — что примеры норму не расширяют
2026-07-26 16:09:58 +03:00
av 1d19e0357b язык: усиления источников названы своими
- три клетки «что взято» правились по факту: DMN даёт политику совпадения,
  но не требует полноты; в 29148 обоснование — рекомендуемый атрибут; вывод
  про обязательность шаблона в EARS не сформулирован
- заведён раздел «Где источник усилен»: полнота таблиц, обязательность
  обоснования и вывод из EARS предъявлены как наши решения с доводами
- поправлены два места, где та же натяжка повторялась прозой: «Таблицы
  решений» и «Обоснование обязательно»
2026-07-26 16:03:47 +03:00
av 682fa075bb снятое правило остаётся заглушкой, нумерация сплошная
- META-31 и META-32: номера идут без пропусков, ссылка обязана разрешаться;
  обе проверки стали механическими — данных со стороны языка им хватает
- заведена метка СНЯТО: заголовок и номер снятого правила сохраняются, норму
  с обоснованием заменяет блок с датой и причиной, отдельный реестр снятых
  номеров не нужен
- META-9, META-16 и META-26 переписаны из таблицы «Освободившиеся номера» в
  заглушки; три висячие ссылки, тянувшиеся с утра, закрылись
2026-07-26 15:59:22 +03:00
av 170c06c1da язык: короткое описание для читателя копии едет в репозиторий
- заведён READING.md: словарь со значениями, форма правила и её граница,
  ссылки, локальная часть — без разделов о ведении набора и без META-ссылок,
  примеры на X-префиксах
- сборщик кладёт его в docs/conventions/ и перезаписывает целиком; в манифест
  набора добавлена секция [language] с версией и двумя документами
- META-30: правка словаря или состава частей правила доходит до READING.md,
  иначе потребитель толкует ДОПУСКАЕТСЯ по прежней версии
2026-07-26 15:51:54 +03:00
av 67d51db212 механизация больше не разрешает удалять норму
- META-9 снят: удаление оставляло подписчика, пришедшего после, без нормы и
  без проверки, а «механизировано у всех» канону не проверить — списка
  подписчиков у него нет по построению
- META-8 переписан в запрет: норма остаётся в правиле, чем бы её ни
  проверяли; линтер сообщает, что нарушено, но не что требуется (META-6)
- МЕХАНИЗИРОВАНО объявлена свойством репозитория: в тексте конвенции отметки
  нет, её место — запись о механизации ниже маркера (META-7)
2026-07-26 15:41:52 +03:00
av fe61ecd6c5 guide: язык употребляется, значит и проверяется как в конвенции
- проверки разведены по роли слова: то, что язык употребляет (конвенции и
  GUIDE.md), проверяется; то, что цитирует (LANGUAGE.md, README.md), — нет
- список машинных проверок разбит на форму правила и распространение:
  вторая группа (тема в шапке, пути канона, чужие префиксы, локальные X)
  касается только того, что едет к потребителю
- в GUIDE.md добавлена строка о версии языка и убрано заглавное СЛЕДУЕТ из
  вводной прозы «Оформления» — единственное нарушение, которое исключение
  прятало
2026-07-26 15:34:49 +03:00
av c1cb240540 темы: определение, объявление в шапке и манифест набора
- тема — набор правил об одном фокусе разработки, имя латиницей (нижний
  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
2026-07-26 15:27:55 +03:00
av d5118336cb язык: примеры переведены на вымышленные X-правила
- живые идентификаторы KEYS-5, SLOG-8.1, SLOG-27, MIGR-2/4/6 в примерах
  заменены на XKEY, XMIG, XLOG: номера канона означали не то, что в примере,
  и расходились дальше при каждой перенумерации
- сказано явно, что описание языка ни на один набор конвенций не опирается;
  ссылка на обоснования канона в разделе про ПОЧЕМУ заменена на внешние
  практики
2026-07-26 15:15:30 +03:00
av df8c58671f язык: объявлена граница правила
- область правила — от его заголовка до следующего заголовка любого уровня;
  метка открывает блок, хвост после ПОЧЕМУ — продолжение обоснования, а
  таблица после модальной метки — часть нормы
- проверка «заглавных модальных слов вне правил нет» стала реализуемой:
  прозой считается то, что лежит вне областей правил
- нормы, сидевшие в хвостах, подняты в блок нормы: заведены SLOG-25.4 и
  GERR-26.3, у GTIM-12 «базовый слой» заменён на TIME-12
2026-07-26 15:10:59 +03:00
av 4943bf1dd2 второе условие ДОЛЖЕН ослаблено до воспроизводимости вердикта
- META-6 переписан: ступень требует не машинной проверки, а того, чтобы
  двое проверяющих по тексту правила выносили один вердикт; проверяющий по
  умолчанию — читатель, человек или агент
- заведён META-27: машинная проверка желательна везде, где пишется, но
  ступени не задаёт — иначе канон стоит в СЛЕДУЕТ до появления скриптов;
  обоснование META-25 пересобрано на новом условии
- LANGUAGE.md и CLAUDE.md приведены к той же формулировке, вопрос 1 из
  TODO закрыт, остальные перенумерованы
2026-07-26 15:01:51 +03:00
av 7b2869d3a4 todo: заведена секция «Язык и подход» по итогам ревью
- девять находок ревью описания языка записаны вопросами 1–9: противоречие в
  условиях ДОЛЖЕН, неопределённая граница правила, примеры на живых
  идентификаторах, «тема» без реестра, ложное исключение GUIDE из проверок,
  МЕХАНИЗИРОВАНО без защиты нового подписчика, семантика слов вне копии,
  проверки без источника данных, натяжки в опоре на стандарты
- вопросы поделены на две секции: язык с подходом идёт первым, канон с
  тулингом вторым; «Мелкое» слито в вопрос 8, куда относилось по смыслу
- нумерация сплошная 1–15, внутренние ссылки переписаны под неё; в вопрос 12
  добавлена зависимость чекера от вопросов 2 и 8
2026-07-26 14:49:41 +03:00
av 4cd0c97ed0 язык остался версией 1, правило движения номера записано
- бумп до 2 откачен: копий в природе нет, читать по версии 1 пока нечему, и
  номер сжигать незачем
- вместо истории версий записано правило: номер двигается, когда изменение
  формы способно изменить чтение уже разданной копии; правки формы до раздачи
  копий его не двигают, а смена словаря под другой язык — не двигает никогда
2026-07-26 14:30:36 +03:00
av 72d77d74bf ПОЧЕМУ стало ключевым словом, язык поднят до версии 2
- метка обоснования пишется заглавными и вошла в словарь набора: скелет
  правила теперь целиком из ключевых слов, а не смесь `**ДОЛЖЕН.**` и
  `**Почему.**`; в переводе на другой язык метка меняется как остальные слова
  (ПОЧЕМУ / WHY), 235 вхождений заменены
- метки правила выделены из шкалы в отдельный перечень: ПОЧЕМУ и
  МЕХАНИЗИРОВАНО обязательности не задают, а размечают части, и стандартом не
  даются ни в одном языке — раньше МЕХАНИЗИРОВАНО висело строкой в таблице
  модальности
- версия языка поднята до 2, потому что изменение формы меняет чтение уже
  написанного текста; строка о версии в двенадцати конвенциях перечисляет
  теперь и метки, а служебные слова сценария в неё по-прежнему не входят
2026-07-26 14:28:37 +03:00
av c8071dc438 guide: META-26 снят, форма обоснования рамками не ограничивается
- запрет слов обязательства в «Почему» был лишним по построению: правило о
  заглавных уже делает строчное «обязан» ненормативным, так что второй копии
  нормы не возникает, а цена — автор воюет со списком слов вместо объяснения
- в LANGUAGE записано прямо: рамки у обоснования только смысловые, длина,
  рассуждение, примеры и ссылки на внешние практики и чужие проекты допустимы
- заведён раздел «Освободившиеся номера»: META-16 и META-26 с причинами. Без
  такого списка упоминание номера в прозе не отличить от ссылки на исчезнувшее
  правило — это же нужно будущей проверке ссылок
2026-07-26 14:22:38 +03:00
av 3e0ec46134 guide: заведён META-26 — обоснование объясняет, а не требует
- «Почему» не пересказывает норму словами обязательства: у оригинала есть
  идентификатор, у копии нет, и расходятся они при первой правке оригинала, а
  отступление от копии адресовать нечем
- модальность рекомендательная по META-6: греп находит слово, а не нарушение
  — «за попыткой следует повтор» и «становится обязанностью вызывающего»
  описывают ход событий; утверждения о невозможности («нельзя») правилом не
  затрагиваются, это ISO-евская возможность в прозе
- SLOG-12 починен: факт о том, что `slog` не разделяет CRITICAL и FATAL, уехал
  из нормы в «Почему», а норма теперь говорит то же, что заголовок
2026-07-26 14:18:06 +03:00
av 98fc69d585 guide: заведён META-25 — высшая модальность требует названного вреда
- ДОЛЖЕН выбирается, только когда в «Почему» сказано, что ломается при
  нарушении: до сих пор обязывало лишь второе условие (META-6, машинная
  проверка), и любую проверяемую мелочь можно было пометить ДОЛЖЕН
- модальность самого правила — СЛЕДУЕТ, и это не слабость: «вред назван»
  устанавливается чтением, значит по META-6 иначе и быть не может
- kebab-case в именах файлов пересобран как пример META-25: проверяется
  регуляркой тривиально, но вреда нет — потому правилом и не записан
2026-07-26 14:07:54 +03:00
av 3fce663d7a служебные слова сценарного блока стали частью словаря набора
- `КОГДА`, `ТОГДА`, `И`, `ИЛИ` (по-английски WHEN/THEN/AND/OR) подчиняются тем
  же требованиям, что модальные слова: одна форма на роль, заглавными, набор
  один на канон и выбирается под естественный язык
- модальностью они не являются — обязательности не задают, только структуру,
  поэтому в строку о версии языка не попадают и под проверку «модальные слова
  вне правил» не подпадают
- единственный сценарный блок канона (SLOG, «Два цикла повтора») переписан с
  WHEN/AND на русские связки; отказ от `GIVEN/WHEN/THEN` уточнён — он касается
  общей формы записи, а на стыке правил эта форма взята сознательно
2026-07-26 14:03:29 +03:00
av f99a513058 guide: заведён META-24 — ссылка слоя на идентификаторы своей базы
- языковой и стековый слои называют идентификатор правила арх-слоя своей темы
  прямо в норме: подписываются темой, а не слоем, поэтому базовый слой в
  собранной копии присутствует всегда и ссылка не ведёт в пустоту
- разрешение узкое по построению — на слои других языков и стеков не
  распространяется, их состав в копии зависит от манифеста
- из META-21 убрано предписание ссылаться на свой слой словами «базовый
  слой»: слова не проверяются и не ведут к утверждению, а идентификатор ведёт
2026-07-26 13:56:43 +03:00
av 7fca0e8cb8 из канона удалены пустые локальные регионы
- 31 регион `<!-- local:имя -->` в двенадцати файлах удалён, а не перенесён:
  локальное принадлежит копии и живёт ниже маркера `<!-- conv:local -->`
  (META-22), так что наполнять регионы в каноне нечем
- вместе с ними ушли два опустевших раздела «Связано» — в arch и ansible
  слоях app-directories канонических ссылок нет, а пустой заголовок ничего
  не адресует; CLAUDE.md уточнён: раздел заводят, когда ссылки есть
- форма проверена скриптом: у всех правил модальность и «Почему», префиксы
  сходятся с реестром, дыр в нумерации нет
2026-07-26 13:52:07 +03:00
av a961aa2b40 todo: закрытые вопросы удалены, оставшиеся перенумерованы
- ушли четыре закрытых раздела (ссылка на язык, модель сборки, разбор
  прототипов, мультиязычность) и закрытые куски внутри оставшихся: принятые
  решения живут в README, GUIDE и LANGUAGE, а черновик их дублировал
- полезные остатки перенесены, а не потеряны: прототипы Vale и vendir — в
  вопрос про тулинг, вынос арх-ядра из errors и logging — в пары слоёв
- нумерация сплошная 1–11, внутренние ссылки поправлены под неё; в шапку
  добавлено правило, что закрытый вопрос отсюда удаляется
2026-07-26 13:46:48 +03:00
av c04a54ffd5 todo: заведены четыре открытые темы по языку записи
- 12: `WHEN`/`AND` в блоке стыка правил — английские служебные слова там же,
  где `SHALL` отклонён как занятый OpenSpec; либо перевод, либо явная
  оговорка, что форма спецификации в этом месте намеренна
- 13: критерий «названного вреда» для ДОЛЖЕН описан в языке, но правила под
  него нет — META-6 обязывает только понижать при отсутствии проверки
- 14 и 15: одиннадцать таблиц не прочитаны на взаимоисключительность
  (подозреваемый SLOG-11), и канон не просмотрен на факты, записанные
  модальным словом
2026-07-26 13:43:45 +03:00
av 9318087248 язык записи опёрт на стандарты, словарь стал параметром
- шкала обязательности объявлена инвариантом, а набор ключевых слов —
  параметром естественного языка набора: для английского готовый словарь
  даёт BCP 14, для прочих берут перевод стандарта или делают свой; отклонены
  синонимы ступеней и `SHALL`, занятый OpenSpec
- применены шесть дельт: нормативно только заглавное написание (RFC 8174),
  ДОЛЖЕН требует названного вреда и машинной проверки сразу, ДОПУСКАЕТСЯ
  адресовано рецензенту, МЕХАНИЗИРОВАНО выведено из шкалы в отметку рядом с
  модальностью (ISO/IEC/IEEE 29148), у таблиц объявлены политика совпадения
  и полнота (DMN)
- «Форма записи — LANGUAGE.md» в двенадцати конвенциях заменена строкой о
  версии языка по образцу boilerplate BCP 14: пути канона в копии не
  существует, а словарь и правило заглавных строка несёт сама
2026-07-26 13:42:10 +03:00
av fea0285619 todo: закрыт вопрос про модель сборки, разобраны прототипы
- вопрос 3 закрыт: модель записана в README и GUIDE, отмечены три места,
  где итог разошёлся с прежними заготовками — нет лока, нет маркеров секций,
  локальные префиксы не объявляются, а резервируются буквой `X`
- вопрос 4 переформулирован: регионы не переносятся в единую секцию, а
  удаляются из канона — наполнять их в каноне нечем
- вопрос 7 заменён разбором: транспорт переизобретался, оси и сборка аналога
  не имеют, Vale отклонён; в 1, 9 и 10 добавлены следствия
2026-07-26 12:55:16 +03:00
av c2f68e6be1 обвязка: модель копий переписана под один маркер и манифест
- именованные регионы `<!-- local:имя -->` заменены на единственный
  `<!-- conv:local -->`: всё ниже него принадлежит репозиторию, всё выше
  пересобирается, поэтому имени-которое-можно-осиротить больше нет
- лок-файла и `origin_hash` в шапке нет — «что было в прошлый раз» знает git,
  копии закоммичены, автоматического обновления не существует; транспорт
  назад (`push`) убран вместе с ними
- заведены META-22 (репозиторное пишется ниже маркера) и META-23 (форк не
  носит `origin:`), META-17 переписан под маркер; буква `X` в префиксе
  зарезервирована за локальными правилами потребителей
2026-07-26 12:55:05 +03:00
av 4de6e0f896 черновик «К обсуждению» закоммичен
- одиннадцать открытых вопросов по сборке, тулингу и разделению языка и
  набора конвенций: в переписке они теряются, а часть уже противоречит
  README, и это противоречие видно только рядом с текстом
- снята строка «Не коммитится» и поправлено то же утверждение в CLAUDE.md
2026-07-26 09:06:38 +03:00
av f2aee9e992 настройки claude code включены в репозиторий
- .claude/settings.json включает плагин av-dev-git@av-dev-skills; набор
  плагинов у канона общий с остальными репозиториями, поэтому лежит в git,
  а не в локальных настройках
2026-07-26 09:06:37 +03:00
av 044c2db267 время: починены ссылки на правила идентификаторов
- «Почему» у TIME-5 и TIME-6 после перенумерации в dcdd922 указывало на
  TIME-3 и TIME-2 вместо KEYS-3 и KEYS-2: массовая замена подставила
  префикс своего файла, и ссылки молча поехали на чужие по смыслу правила
- заодно ушли два последних нарушения META-21 — путь `arch/db-identifiers.md`
  в тексте конвенции
2026-07-26 09:06:37 +03:00
av 5c2cf35116 заведён CLAUDE.md — точка входа агента в канон
- одна строка на правило с идентификатором, как требует META-19: форма
  правила, схема префиксов, META-20/META-21, выбор оси, оформление файла
- зафиксирован стиль коммитов и то, что README описывает текущее
  устройство, а TODO.md — площадка для обсуждения, а не решения
2026-07-26 09:06:37 +03:00
av 2ed568bad1 ссылки между конвенциями переписаны на темы и идентификаторы
- 41 ссылка вида `lang/go/logging.md` заменена на «конвенция `logging`»,
  идентификатор правила или «базовый слой» для своей же темы
- MIGR-8 больше не отсылает за форматом меток времени, а называет его;
  MIGR-11 перенёс ссылку на KEYS-1/KEYS-2 из нормы в «Почему»
2026-07-25 21:12:26 +03:00
av 421374c4a2 guide: правила самодостаточности нормы и формы ссылки
- META-20: норму можно исполнить, имея один файл; на чужую тему смотрят
  только «Почему», «Связано» и разграничение области — подписка это
  произвольное подмножество, графа зависимостей нет по построению
- META-21: ссылка ведёт на имя темы или идентификатор правила; путь файла
  канона умирает при сборке, потому что слои темы становятся секциями
2026-07-25 21:12:25 +03:00
av 840904d454 реестр префиксов перенесён в корень
- реестр покрывает и обвязку тоже (GUIDE.md), поэтому внутри conventions/
  он упирался в путь `../GUIDE.md`; теперь пути даются от корня репозитория
- README дополнен разделом про префиксы и строкой в таблице обвязки
2026-07-25 20:57:54 +03:00
av 4a7cfca8f6 обвязка: идентификаторы правил описаны через префиксы
- LANGUAGE.md: раздел «Идентификаторы» переписан под префиксы, в список
  машинных проверок добавлена сверка с реестром
- GUIDE.md перенумерован под префикс META, «номер правила» заменён на
  «идентификатор»
2026-07-25 20:55:38 +03:00
av dcdd92230b заведён реестр префиксов, правила канона перенумерованы
- идентификатор правила теперь `<ПРЕФИКС>-<номер>` вместо `R<номер>`:
  префикс уникален по всему канону, поэтому ссылка больше не требует пути
  к файлу и не зависит от того, на какой оси файл лежит
- префикс выбирается под файл, а не выводится по формуле, и хранится в
  conventions/prefixes.toml вместе с выбывшими; номера сохранены один в
  один вместе с дырами
2026-07-25 20:55:37 +03:00
av 972627f641 время: приём чужого офсета и регистрация исключений линтера
- arch R13: валидное по RFC 3339 значение с чужим офсетом нормализуется при
  разборе; канонический вид — обязательство писателя, не контракт с партнёром
- go R13: исключение регистрируется директивой //nolint на месте вызова, а не
  exclude-записью в конфиге, которая адресует путём и отвязывается
2026-07-25 20:15:36 +03:00
av f073a68f75 web-ui: сбой без фрагмента и запрос без поля поверхности
- R34: глобальный слушатель htmx:responseError — на 5xx htmx ничего не
  свопит, и интерфейс замирает без признака сбоя
- R35: 400 вместо поверхности по умолчанию, иначе своп идёт с чужим id
- в R14 снято противоречие: слушатель больше не числится среди
  отвергаемых настроек
2026-07-25 20:15:36 +03:00
av 477499877d errors: непокрытая маппингом ошибка и поведение после recover
- R25: 500 и ERROR с признаком непокрытой — без признака забытая ветвь
  неотличима в логах от упавшей базы
- R26: HTTP-запрос завершается 500, цикл продолжается со следующего
  элемента, а упавший выводится из оборота — иначе poison message
2026-07-25 20:15:36 +03:00
av 9085601db2 config: отсутствие файла и содержание сообщений валидатора
- R20: конфига нет — не стартуем; умолчания существуют для неполного файла,
  а не для отсутствующего
- R21: значение поля в сообщении валидатора печатается по тому же признаку
  секретности, что у R15 и R16, второй список не заводится
- в перечень проверок R18 добавлен формат идентификаторов сущностей
2026-07-25 20:15:36 +03:00
av 0fc1994db7 идентификатор новой сущности — всегда ULID
- R1 больше не ветвится по признаку внешней адресуемости: заранее отличить
  внутренние сущности, которые станут внешними, невозможно
- целочисленный ключ остаётся у существующих схем и идёт вместе с
  AUTOINCREMENT — переиспользованный rowid молча наводит протухшую ссылку
  на другую строку (db-schema R12)
- таблица R5 ограничена внешними источниками, регион «решение» убран
2026-07-25 20:15:35 +03:00
av 6456b81d91 исправлены дефекты формулировок в конвенциях
- убраны неверные утверждения: покрытие forbidigo сужено до честного,
  таблица классов доменного отказа больше не претендует на полноту,
  механизация не подаётся как факт канона
- введены недостающие определения (доменная и внешняя границы, объявление
  пути), критерий постоянного поля сведён к одному на R16.1 и R17
- kebab-case имени файла убран из правил в прозу: обоснование не
  формулировалось, номер R16 оставлен свободным
2026-07-25 19:34:41 +03:00
av 0842850fae конвенции отделены от обвязки
- сами конвенции переехали в conventions/, описательное — в корень:
  LANGUAGE.md (язык записи) и GUIDE.md (как ведут конвенции)
- conv синхронизирует только conventions/, пути в origin даются
  относительно неё — раскладка копий в репозиториях не меняется
2026-07-25 19:23:32 +03:00
av 62c5645dd4 common: язык дополнен состоянием МЕХАНИЗИРОВАНО
- правило, чья норма уехала в линтер, сохраняет номер и «Почему», а место
  нормы занимает отметка — иначе получался объект без модальности
- записано, что факт «механизировано у всех» устанавливается вручную:
  канон списка подписчиков не знает по построению
2026-07-25 19:17:33 +03:00
av 31d0620f55 остальные конвенции переведены на формальный язык
- 11 файлов разобраны на нумерованные правила: 220 правил в каноне, у
  каждого модальность и обязательный блок «Почему»
- классифицирующие места оформлены таблицами, файловый статус снят
  отовсюду, локальные регионы сохранены под прежними именами
2026-07-25 19:17:32 +03:00
av 7701a28df1 db-identifiers и ansible/app-directories переписаны на формальный язык
- 7 и 9 правил соответственно, у каждого модальность и обоснование
- условие выбора первичного ключа стало правилом с таблицей веток, на
  которые можно ссылаться из отступлений и механизации
2026-07-25 18:56:30 +03:00
av 22c6855968 common: добавлен язык записи конвенций
- правило = номер + модальность (ДОЛЖЕН / СЛЕДУЕТ / ДОПУСКАЕТСЯ) плюс
  обязательный блок «Почему»; из OpenSpec взяты идентификаторы правил, но
  не SHALL и не GIVEN/WHEN/THEN
- файловый статус отменён: обязательность живёт на правиле, а в шапке ещё
  не переведённых конвенций ключ остаётся меткой «это проза»
2026-07-25 18:56:29 +03:00
av 4a59c71737 заведён канон общих конвенций для личных проектов
- 13 конвенций по осям arch / lang / stack / common; репозитории берут
  оттуда копии в свой docs/conventions/ и коммитят их у себя
- conv — синхронизация копий: add / status / diff / pull / push, локальные
  регионы исключены из сравнения, поэтому расхождение не даёт шума
2026-07-25 18:18:18 +03:00