- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
54 lines
4.4 KiB
Markdown
54 lines
4.4 KiB
Markdown
# 26. Канон 4: правка задним числом отменена (2026-08-04)
|
||
|
||
## Что было
|
||
|
||
Секцию `Разработка` переименовали в `Сопровождение` без повышения версии канона
|
||
— на посылке «ни один проект на каноне 3 не стоит» (тема 25,
|
||
[Р102](25-maintenance-section-shared-vocab.md)). Посылка оказалась ложной:
|
||
healthlog уже переехал, `docs/.pm.json` держит `"canon": 3`, а роадмап — секцию
|
||
`Разработка` с прописной. Правка записи версии 3 переписывала то, по чему он
|
||
ехал.
|
||
|
||
## Решено
|
||
|
||
**Р104. Запись версии — черновик ровно до первого переехавшего проекта.** После
|
||
этого она **история**, и любое изменение канона заводит новую версию, даже если
|
||
меняется одно слово. Проверять это дёшево: `grep '"canon"' */docs/.pm.json` по
|
||
живым проектам. Дорого — обратное: проект, повышенный по тексту, которого больше
|
||
не существует, невоспроизводим.
|
||
|
||
Запись версии 3 восстановлена дословно (`Разработка` | `Tooling`), переименование
|
||
уехало в версию 4. jellybit, стоящий на каноне 2, прочтёт обе записи подряд и
|
||
заведёт `Разработка`, чтобы через шаг переименовать; в шаг версии 3 добавлена
|
||
оговорка «едешь сразу на 4 — заводи `Готово` последней и не переставляй дважды».
|
||
Лишний шаг — плата за честную историю, и она мала.
|
||
|
||
**Р105. `Готово` переехало вниз, и порядок секций стал каноническим.**
|
||
Достигнутое **копится**: через год этой секции больше, чем всех остальных
|
||
вместе, — и стоя первой она отодвигает за экран ровно то, ради чего роадмап
|
||
открывают чаще всего. Порядок теперь проверяется (`roadmap_lint`) и правится
|
||
(`check --fix` переставляет секции вместе с содержимым): без проверки порядок
|
||
разъедется молча, а переставлять секцию с десятком строк руками — работа, на
|
||
которой ошибаются.
|
||
|
||
**Р106. Индексы позиций считаются из самого кортежа.** `ACHIEVED` был `0` и стал
|
||
`3`; хардкод индексов пережил бы перестановку молча и сломал бы `close`. Теперь
|
||
`PLANNED, DIRECTIONS, OPERATIONS, ACHIEVED = range(len(ROADMAP_SECTIONS))` —
|
||
переставили секцию, индексы переехали сами.
|
||
|
||
## Что из этого следует
|
||
|
||
**С98. Отбивка нужна и перед заголовком.** Перестановка блоков ставит два
|
||
заголовка вплотную — `spaced_sections` правил только строку после. Дефект
|
||
нашёлся сразу же, на первой перестановке демо-набора: класс правки, существующий
|
||
только потому, что появилась другая правка.
|
||
|
||
**С99. `check --fix` переставляет, но не переименовывает.** Чужую секцию он
|
||
оставляет ошибкой, и на переименовании `Разработка` → `Сопровождение`
|
||
останавливается: имя — решение человека, порядок — механика. Тот же разрез, что
|
||
между регистром (правит) и составом (не трогает).
|
||
|
||
**С100. Версия канона отделяет состояния проектов, а не редакции текста** — и
|
||
ровно поэтому её нельзя не поднять, когда состояние хоть одного проекта уже
|
||
зафиксировано.
|