обвязка: модель копий переписана под один маркер и манифест

- именованные регионы `<!-- local:имя -->` заменены на единственный
  `<!-- conv:local -->`: всё ниже него принадлежит репозиторию, всё выше
  пересобирается, поэтому имени-которое-можно-осиротить больше нет
- лок-файла и `origin_hash` в шапке нет — «что было в прошлый раз» знает git,
  копии закоммичены, автоматического обновления не существует; транспорт
  назад (`push`) убран вместе с ними
- заведены META-22 (репозиторное пишется ниже маркера) и META-23 (форк не
  носит `origin:`), META-17 переписан под маркер; буква `X` в префиксе
  зарезервирована за локальными правилами потребителей
This commit is contained in:
av
2026-07-26 12:55:05 +03:00
parent 4de6e0f896
commit c2f68e6be1
5 changed files with 213 additions and 148 deletions
+16 -15
View File
@@ -12,10 +12,10 @@
Не ради строгости. Три конкретные вещи, которые без адресуемых правил не
работают:
- **Механизация.** Регион `механизировано` должен говорить «правило
`MIGR-4` проверяет `archrules`», а не «`AUTOINCREMENT` в новых миграциях —
`archrules`»: во втором случае читатель сам догадывается, к какому
утверждению это относится, и догадывается по-разному.
- **Механизация.** Запись о ней должна говорить «правило `MIGR-4` проверяет
`archrules`», а не «`AUTOINCREMENT` в новых миграциях — `archrules`»: во
втором случае читатель сам догадывается, к какому утверждению это
относится, и догадывается по-разному.
- **Отступления.** «У нас не так» бесполезно, пока не сказано, что именно
«не так». Со ссылкой на правило отступления становятся счётными: видно,
сколько правил конвенции репозиторий реально не соблюдает.
@@ -79,7 +79,7 @@
Модальность живёт на **правиле**, а не на файле. Прежний файловый статус
(`status: рекомендуемая` / `обязательная` в шапке) отменён: он неизбежно
врал, потому что один файл смешивает жёсткие требования с советами. В шапке
остаются только `prefix`, `extends` и служебные ключи копии.
остаются только `prefix` и `extends`.
Мы **не используем SHALL и прочие английские ключевые слова**. Они заняты
спецификациями (OpenSpec), и общий словарь стирал бы границу «конвенция —
@@ -179,22 +179,21 @@ AND тик фонового цикла упал по той же причине
(«новые таблицы; существующие не переписываются»). Это рамка для всех
правил файла, а не правило.
- **Связано** — ссылки на смежные конвенции, ADR, код.
- **Локальные регионы** — содержимое принадлежит репозиторию.
- **Локальная часть копии** — содержимое принадлежит репозиторию.
- Вводная проза, объясняющая предмет конвенции.
## Как на правила ссылаются копии
В репозитории:
Ниже маркера локальной части, в репозитории:
```markdown
<!-- local:механизировано -->
MIGR-2, MIGR-4 — `internal/archrules` (проверяются в новых миграциях).
<!-- /local -->
<!-- conv:local -->
<!-- local:отступления -->
MIGR-6 — не соблюдается в легаси-таблицах `show_history`, `queue`: составные
MIGR-2, MIGR-4 механизированы — `internal/archrules` (проверяются в новых
миграциях).
MIGR-6 не соблюдается в легаси-таблицах `show_history`, `queue`: составные
ключи там появились до конвенции, переписывание требует миграции данных.
<!-- /local -->
```
Отсюда видно и то, чего раньше не было видно: конвенция из восьми правил,
@@ -211,8 +210,10 @@ MIGR-6 — не соблюдается в легаси-таблицах `show_hi
берёт следующий свободный, а не первый освободившийся);
- у каждого `### <ПРЕФИКС>-<n>` есть модальное слово (или отметка
МЕХАНИЗИРОВАНО) и блок «Почему»;
- ссылки вида `<ПРЕФИКС>-<n>` — хоть в тексте канона, хоть в локальных
регионах копии — указывают на правила, которые ещё существуют;
- ссылки вида `<ПРЕФИКС>-<n>` — хоть в тексте канона, хоть в локальной части
копии — указывают на правила, которые ещё существуют;
- префиксы локальных правил копии начинаются на `X` и не совпадают с
реестром канона;
- чужой префикс не встречается в абзаце с модальностью (META-20);
- путь файла канона не встречается в тексте конвенции (META-21);
- модальные слова не встречаются вне правил.