План правок по итогам U-02 · развилки к решению#
- Статус: составлен и внесён целиком 2026-09-22. Десять развилок, тринадцать итераций, ни одного открытого вопроса
- Откуда: 21 находка прогона; восемь ADR, четырнадцать замечаний
- Форма: развилка = одна итерация. У каждой варианты и рекомендация; выбирает John
- Правил по ходу прогона не вносилось — сознательно: документ, поправленный в середине применения, перестаёт быть тем, что применяли
Сводка#
| # | О чём | Что трогает | Класс | Рекомендация |
|---|---|---|---|---|
| Р1 | Предмет обещания определяет третья сторона и ещё не определил | D-11 |
MAJOR | ✅ A внесено — D-11 v2.0 |
| Р2 | Дисквалификаторы D-05 не называют, что именно отвергают |
D-05 |
MAJOR | ✅ B внесено — D-05 v4.0 |
| Р3 | На гринфилде вопрос «сколько их уже есть» становится решением | мастер-шаблон | MINOR | ✅ A внесено — мастер v6.3 |
| Р4 | Пометки для факта, измеренного в чужой системе, нет | мастер-шаблон и D-06 |
MINOR + MAJOR | ✅ B внесено — мастер v6.3 и D-06 v3.0 |
| Р5 | Обязательства D-04 привязаны не к тому условию |
D-04 |
MINOR | ✅ A внесено — D-04 v3.1 |
| Р6 | «Добавляет работу» — свойство рода, а не позиции в списке | D-06 |
MINOR | ✅ A внесено — D-06 v3.1 |
| Р7 | Следствие исчерпания бюджета описано только для систем с выкатами | D-10 |
MINOR | ✅ A внесено — D-10 v1.2 |
| Р8 | Три мелкие правки одним списком | разное | правка | ✅ A внесено — D-09 v3.1, 02-versioning v1.4, пара D-01 ↔ D-10 |
| Р9 | Стадия как свойство: общее и специфичное внутри шага | рабочий процесс, шапки, три документа | MINOR | ✅ внесена целиком — мастер v6.4 и v6.5, одиннадцать шапок, строки шага, блоки по стадиям, пометки [стадия: …], одиннадцатая проверка. Р9.4: проверка проведена, диаграммы не будет |
| Р10 | Артефакты, уезжающие наружу, никто не считает | мастер-шаблон | MINOR | ✅ B внесено — мастер v6.3 |
Р1 · D-11: предмет обещания определяет третья сторона#
Находка 1. Спецификация публикуется 1 октября, методика расчёта сбора выходит в декабре. Обещать приходится раньше, чем определён смысл обещаемого. Ближайший дисквалификатор — «ломается смысл, а не схема» — про изменение смысла, а не про его отсутствие в момент обещания. В охват ADR-0001 пришлось внести оговорку, которой документ не предусматривает.
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Шестой дисквалификатор: предмет обещания определяется не нами и ещё не определён — обещать можно форму, но не содержание, и это записывается словами в охвате | MAJOR |
| B | Оговорка в раздел об охвате, без дисквалификатора | MINOR |
| C | Ничего: случай редкий | — |
Рекомендую A. B оставляет правило необязательным, а случай из редких только на вид: любая система, работающая по регламенту, который дописывают параллельно с ней, попадает в него целиком. Добавление дисквалификатора — MAJOR по определению правил версионирования; старых ADR у D-11, кроме ADR-0001 этого прогона, нет.
Внесено 2026-09-22 — D-11 v2.0#
Шестой дисквалификатор поставлен первым: по правилу мастер-шаблона организационные идут впереди, а этот именно такой — он о том, существует ли предмет обещания, а не о том, чего обещание стоит.
Формулировка называет отвергаемое, как и остальные пять: отвергается не обещание, а его охват — из него исключается всё, чей смысл задаёт третья сторона. Добавлена оговорка, которой в разборе не было: исключённое из охвата не защищено ничем, и потребитель обязан узнать об этом из записи, а не из спора.
У охвата появилось требование в разделе 5: исключение, сделанное из-за третьей стороны, называется прямо — что не обещано и кто это определит. Умолчание здесь читается потребителем как обещание.
В условия пересмотра добавлен единственный случай, когда охват растёт: третья сторона определила то, что было исключено.
Старым ADR перепроверять нечего, и по любопытной причине. Единственный ADR по D-11 — ADR-0001 этого же прогона — правило уже применил вручную, исключив из охвата смысл величин. Именно применение вручную и показало, что правила в документе нет.
Р2 · D-05: дисквалификаторы не называют отвергаемое#
Находка 2. Седьмой дисквалификатор — «части с разными целями по доступности в одном кванте» — называет плохое состояние и не говорит, что из него отвергается. Выходов два и они противоположны.
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Переписать седьмой: при неснимаемом дисквалификаторе отзывается требование, а не проводится линия | MAJOR |
| B | Переписать все семь по одному образцу: каждый называет отвергаемое, как в D-11 |
MAJOR |
| C | Ничего | — |
Рекомендую B. Рецензия D-11 сделала ровно это для всех пяти его дисквалификаторов, и правило оказалось не стилистическим: без него автор выбирает выход из обстановки, а не из документа. Чинить один из семи значит оставить шесть на честном слове.
Внесено 2026-09-22 — D-05 v4.0#
Переписаны все семь. Отвергаемое оказалось шести разных родов, и это само по себе результат: разрез целиком, число частей, отдельная часть, линия, основание линии, требование.
| # | Что отвергает |
|---|---|
| 1 · нет наблюдаемости | Разрез целиком — и единственный, который можно не отвергнуть, а купить; цена покупки называется в ADR, иначе отвержение состоялось |
| 2 · сервисов больше, чем команд | Число частей, а не разрез |
| 3 · у части нет владельца | Эту часть, а не разрез: присоединяется к соседней |
| 4 · разрывает атомарную операцию | Линию, а не требование атомарности |
| 5 · идёт по техническим слоям | Основание линии. Единственный без законного исхода «оставить как есть»: слой границей не бывает никогда |
| 6 · рассекает класс защищаемых данных | Положение линии: её двигают, а не оплачивают |
| 7 · разные цели в одном кванте | Либо квант, либо различие — правило выбора записано явно |
У седьмого правило выбора теперь есть. Разрез возможен — разрезается квант; разрез невозможен — отзывается различие, и у частей одна цель по доступности. Главное добавление: отзыв различия объявлен решением, а не умолчанием и обязан попасть в ADR строкой «у части N нет собственной цели, она живёт по цели M». Молчаливый отзыв — это и есть «разные цифры в требованиях, недостижимые с первого дня», от которых дисквалификатор защищает.
Старым ADR перепроверять нечего: в ADR-0004 седьмой сработал, выход выбран верно — разрез был невозможен, отозвано различие — и записан строкой, как теперь и требуется.
Р3 · Гринфилд превращает опрос в проектное решение#
Находки 3, 4, 5, 6. D-07 велит письменно ответить, сколько копий уже существует; D-11 объясняет, чего стоит купить знание о потребителях. На гринфилде оба вопроса читаются иначе: копий нет — значит решается, сколько их завести; знание не покупается — оно закладывается бесплатно. Два документа подряд — это свойство набора, а не документа.
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Правило в мастер-шаблон: вопрос вида «сколько их уже есть» на гринфилде читается как «сколько мы заведём», и ответ становится решением, а не фактом; пустая ячейка означает «ещё не решили», а не «не нашли» | MINOR мастера |
| B | Точечные оговорки в D-07 и D-11 |
MINOR каждому |
| C | Строку в D-05: что меняется у соседних документов на его стадии |
MINOR D-05 |
Рекомендую A. Находка прямо названа свойством набора: два документа сегодня, третий завтра. Одно правило в мастер-шаблоне дешевле трёх оговорок и переживёт появление двенадцатого документа.
Внесено 2026-09-22 — мастер-шаблон v6.3, правило в «Правила заполнения»#
Правило стоит сразу после блока о [нет данных], потому что оно о том же — что означает пустая и что означает заполненная ячейка, — и именно там автор гринфилда ошибается: ищет ответ вместо того, чтобы его назначить.
Формулировка называет, что меняется, а не только что происходит: цена ошибки переезжает во времени. На работающей системе неверный ответ обнаруживается замером позже; на гринфилде он создаётся сейчас и станет фактом ровно потому, что так записали. Из этого выведены три следствия — пометка ([прогноз], [требования], [орг], но никогда [замер]), смысл пустой ячейки («ещё не решили», закрывается выбором) и попадание в ADR наравне с остальными решениями.
Оба примера из находок названы прямо — D-07 и D-11, — и сказано, что это свойство набора: третий такой документ найдётся, и оговорка в каждом дороже одного правила в мастере.
Р4 · Пометка для факта, измеренного в чужой системе#
Находки 8, 9. Релизный цикл вендора, доступность удостоверяющего центра, расписание коллегии — это замеры, но не наши. Ни [расчёт], ни [допущение], ни [продукт] их не описывают. В третьем случае пробел помешал дисквалификатору сработать: D-06 требует знать замером, регулярен ли режим, а замер есть только у чужой стороны.
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Пометка [замер сторонний] в словарь мастер-шаблона: измерено и опубликовано владельцем чужой системы; достоверность выше допущения, ниже своего замера |
MINOR мастера |
| B | A плюс правка шестого дисквалификатора D-06: он срабатывает и по стороннему замеру, а не только по своему |
MINOR мастера + MAJOR D-06 |
| C | Ничего: помечать [допущение] и оговаривать словами |
— |
Рекомендую B. A чинит словарь и оставляет дисквалификатор неработающим на гринфилде — то есть ровно там, где он нужнее всего: на работающей системе свой замер есть и без него.
Внесено 2026-09-22 — мастер-шаблон v6.3, словарная половина B#
Пометка [замер сторонний] добавлена в таблицу достоверности между [док]/[сторонний] и [расчёт].
Разбор дал больше, чем «ещё одна строка в словаре»: пришлось объяснить, чем она отличается от [сторонний], иначе две пометки сливаются. [док] и [сторонний] описывают кандидата, которого мы выбираем, и проверяются вопросом о сопоставимости условий измерения: при желании мы измерили бы то же сами. [замер сторонний] описывает чужую систему, которую мы не выбираем и не можем измерить никогда. Отсюда другое условие годности — дата публикации и кто её объявил, а не сопоставимость, — и другой способ обновления: не наш замер, а наблюдение за чужой публикацией.
Исправлена задетая правкой строка: «без третьей степени такой документ нельзя заполнить честно» относилась к [расчёт], а степеней стало четыре — теперь она называет [расчёт] прямо. И добавлено то, ради чего всё затевалось: [замер сторонний] на гринфилде бывает, потому что чужая система существует и тогда, когда нашей ещё нет.
Почему мастер остался MINOR. Записано, что принимает ли сторонний замер конкретный дисквалификатор — решает он сам и говорит словами, а молчание читается как «не принимает». Это сохраняет прежнее поведение всех написанных документов: ни один прежний исход не мог бы выйти другим. Общее правило «дисквалификаторы обязаны принимать сторонний замер» было бы MAJOR мастера — и вариант B такого не требовал.
Вторая половина B не внесена: D-06 → v3.0, чтобы его шестой дисквалификатор срабатывал по стороннему замеру. Идёт отдельной итерацией.
Внесено 2026-09-22 — D-06 v3.0, вторая половина B#
Шестой дисквалификатор теперь читается «известно замером — нашим или владельца зависимости», и за ним стоит абзац о том, почему выбор замера не наш: регулярность режима принадлежит тому, чей отказ мы обходим. Когда зависимость чужая, точка измерения не у нас, своего замера не будет никогда — а у владельца он есть и часто опубликован: обязательства, разборы инцидентов, регламент работ.
Разбор дал то, чего в плане не было: состояний оказалось три, а не два. Сведены таблицей — свой замер, замер владельца (срабатывает так же), замера нет ни у кого. Третье состояние — главное: дисквалификатор не срабатывает, но проверка не пройдена, и это записывается строкой в ADR. Находка 9 сказала ровно это — пробел блокирует проверку, а не только оставляет ячейку пустой, — и без третьей строки правка сводилась бы к смене одного слова.
Названа ошибка, породившая правку, — в тексте документа, а не только в истории: «нашей системы ещё нет» не означает «замера нет». Чужая система существует и тогда, когда нашей ещё нет.
Строка совместимости обновлена — единственная во всём наборе. План говорит «строка совместимости никому не обновляется: MINOR мастера её не трогает», и для десяти документов это верно. D-06 — исключение по существу: он теперь опирается на словарь, которого в v6.0 не было, и объявлять совместимость с v6.0 значило бы сказать неправду. Правило, которое отсюда следует — «MINOR мастера не трогает строку совместимости, кроме документа, который начал пользоваться добавленным», — в 02-versioning не внесено: это правило вне принятых развилок, и оно идёт кандидатом в следующий план ревизии.
Старым ADR: перепроверить один. В ADR-0006 этого же прогона шестой дисквалификатор помечен «не смог сработать: замера нет, системы нет». При v3.0 такая ячейка незаконна: на её месте обязан стоять либо сработавший дисквалификатор, либо строка о том, что владелец зависимости не публикует ничего. ADR не переписывается — исхода прогона правка не отменяет, центр вымышлен и публикаций у него нет; изменилось то, что проверка из непройденной стала возможной. E-03 · ADR-0004 не затронут: замер там был наш.
Р5 · D-04: обязательства привязаны не к тому условию#
Находка 14. Три обязательства — явное состояние «неизвестно», сверка как часть системы, заранее спроектированный разбор расхождений — привязаны к третьему значению оси согласованности. На этом прогоне координата вторая, а все три понадобились.
| Вариант | Что делаем |
|---|---|
| A | Перепривязать: обязательства следуют из того, что завершение зависит от организации вне нашего управления, при любом значении оси |
| B | Добавить их и ко второму значению отдельным абзацем |
| C | Ничего |
Рекомендую A. B описывает то же дважды и оставит вопрос при первом же случае с третьим значением у своей стороны. Класс — MINOR: координата не меняется, меняется список того, что обязано попасть в запись.
Внесено 2026-09-22 — D-04 v3.1#
Обязательства отделены от третьего значения оси и переставлены на своё условие: завершение процесса зависит от организации, которой мы не распоряжаемся. Сказано, что условие выполняется при любом значении оси, и что третье значение — лишь один способ туда попасть, причём более редкий: чаще атомарность не нужна вовсе, а шаг всё равно выполняет чужая сторона и вправе выполнить его позже.
Добавлена проверка одним вопросом: есть ли шаг, который выполняет не наша организация, и ждём ли мы его, чтобы считать процесс завершённым? Ответ «да» включает все три обязательства.
Прежнее утверждение снято явно, блокквотом в теле документа, а не только строкой истории. Стояло: «Отличать это от "атомарность не нужна" обязательно: там обязательств нет вовсе». Это ровно то, что прогон опроверг, и читатель, успевший выучить прежнюю редакцию, должен увидеть отмену там, где читал правило.
Третьему значению оставлено то, что принадлежит ему одному: по координате это «итоговая», но инвариант не закрыт ничем, и запись обязана сказать не «выбрали итоговую согласованность», а «атомарность требуется, недостижима, и вот чем мы её замещаем». Без обязательств значение не опустело.
В раздел 5 дописана строка «Последствия»: при чужой организации в процессе три обязательства — обязательная часть записи.
Старым ADR: перепроверить один вопросом «был ли в процессе шаг чужой организации, которого мы ждём». В ADR-0005 этого прогона обязательства выполнены по существу, но выведены вручную, а не документом; исход не меняется. Два остальных ADR по D-04 — E-01 · ADR-0003 и E-02 · ADR-0003 — проверяются тем же вопросом.
Р6 · D-06: род дисквалификатора, а не позиция#
Находка 15. Документ обещает поведение «добавляет работу, а не отвергает» двум последним дисквалификаторам; здесь так повели себя четыре из шести, включая первый.
| Вариант | Что делаем |
|---|---|
| A | Переписать абзац: те, что описывают дефект исполнения, лечатся работой; те, что описывают несовместимость предмета, отвергают. Первый попадает в обе группы в зависимости от того, чем нарушен инвариант |
| B | Просто расширить список «добавляющих работу» с двух до четырёх |
| C | Ничего |
Рекомендую A. B — подгонка под один прогон: список снова разъедется на следующем кейсе, а правило о роде переживёт.
Внесено 2026-09-22 — D-06 v3.1#
Роды названы таблицей: несовместимость предмета отвергает вариант; дефект исполнения оставляет его с «работой до»; неприменимость документа даёт отвод. Третий род в плане не значился — он обнаружился при письме: шестой дисквалификатор не делает ни того, ни другого, и без третьей строки таблица врала бы о нём.
Сказано главное следствие: один дисквалификатор попадает в разные роды на разных кейсах. Первый отвергает, когда инвариант нарушен существом ответа (устаревший остаток в момент списания работой не лечится), и добавляет работу, когда нарушена формулировка (квитанция говорит «принято» до проверки подписи — меняется текст, а не режим).
Класс держится на одном слове, и это записано прямо. Прежняя редакция говорила «два последних обычно не отвергают» — наблюдение о частом режиме, а не запрет остальным вести себя так же. Поэтому ни один прежний исход не был предписан иначе, и правка MINOR. Будь там «только два последних», она была бы MAJOR. Если это чтение кажется натянутым — класс меняется на MAJOR одной строкой истории, исходы от этого не двигаются.
В запись добавлено требование: у сработавшего дисквалификатора указывается отказ или работа до. Без этого ячейка «сработал» не говорит, остался вариант в игре или выбыл. ADR-0006 завёл пометку «Работа до:» сам, не имея её в документе — верный признак, что правила не хватало.
Старым ADR: исходы не меняются, записи неполны. В E-03 · ADR-0004 и ADR-0006 род сработавших дисквалификаторов не назван. ADR не переписываются.
D-06 получил две версии подряд — v3.0 по Р4·B и v3.1 по Р6, — потому что развилки вносятся по одной. Сливать их в одну версию я не стал: каждая находка получает свою строку истории и остаётся прослеживаемой.
Р7 · D-10: следствие исчерпания бюджета#
Находка 16. Все примеры описывают изменение темпа разработки. В системе, где выкаты запрещены извне, обычное следствие уже в силе и потому не следствие.
| Вариант | Что делаем |
|---|---|
| A | Добавить второй род следствия: режим эксплуатации и внешняя эскалация — с примером «переход в деградацию целиком» и «запрос на продление срока у того, кто его назначил» |
| B | Ничего: дисквалификатор верен и сработал |
Рекомендую A. Дисквалификатор верен и сработал, но ответа не подсказал; искать его пришлось в другом слое без помощи документа.
Внесено 2026-09-22 — D-10 v1.2#
Второй род следствия назван рядом с первым, таблицей: темп изменений — приоритеты, заморозка выката, доля работы на надёжность; режим эксплуатации и внешняя эскалация — переход в деградацию целиком, ручной режим, запрос на продление срока у того, кто его назначил. У каждого сказано, когда он единственный доступный.
Дан признак, которого в плане не было и который дороже самого перечня: обычное следствие уже в силе до всякого исчерпания. Если выкаты внутри окна и так запрещены, «остановить выкаты» — не следствие, а описание текущего положения. Названа и ловушка: дисквалификатор при этом срабатывает верно — он спрашивает «что изменится» и не получает ответа, — но не подсказывает, где искать другой.
Добавлено требование, вытекающее из природы второго рода: он обращён к тому, кем мы не распоряжаемся, и потому называет адресата и его обязательство. «Запросим продление» — не следствие, если никто не обязался рассматривать. Иначе третий дисквалификатор срабатывает снова, уже на втором роде.
Записано одно наблюдение с прогона, не возведённое в правило: следствие второго рода вышло ступенчатым — своё действие на половине бюджета, своё на исчерпании. Вероятная причина — режим эксплуатации двигается постепенно, а «остановить выкаты» двоично. Случай один, и это сказано.
Старым ADR: перепроверять нечего, и оба проверены при внесении. ADR-0008 второй род уже применил вручную — это и показало, что в документе его нет. E-03 · ADR-0005 выбрал следствие первого рода, разбор расхождений в приоритет над плановыми задачами; второй род его не задевает.
Р8 · Три мелкие правки одним списком#
D-09, строка в матрице о лишней оси неверна. Записано «первый кандидат на вычёркивание — окно сосуществования»; на прогоне вычеркнулась наблюдаемость отличия версий, а окно как раз различает формы. Строку исправить (находка 13).- Указатель
D-01↔D-10. Пятый дисквалификаторD-10столкнулся с выбором одного контура хранения изD-01; ни одна шапка о другой не знает. По правилу02-versioning v1.3указатель версии не даёт (находка 18). - Ограничение проверки взаимности записать рядом с правилом. Машина сверяет взаимность существующих ссылок и об отсутствующей паре сказать ничего не может; это надо назвать прямо, чтобы зелёная проверка не читалась как «граф полон» (находка 18).
Рекомендую A: внести все три.
Внесено 2026-09-22 — D-09 v3.1, 02-versioning v1.4, пара указателей#
1. D-09: кандидат на вычёркивание снят вовсе, а не исправлен. План говорил «строку исправить». Заменять одну догадку другой значило бы повторить ошибку с другим именем: разбор показал, что вредна сама подсказка. Названный заранее кандидат подтачивает правило, рядом с которым стоит: автор склонен вычеркнуть ту ось, про которую ему сказали, что она лишняя. Прежний текст приведён целиком и разобран — вычеркнулась наблюдаемость отличия версий, а окно сосуществования как раз различало формы: у одной задано сроком между шагами, у другой не возникает вовсе.
2. Пара D-01 ↔ D-10 заведена. В D-01 — «можно ли измерителю обещания делить хранилище с измеряемым»; в D-10 — «во что обходится отдельный контур хранения, которого требует пятый дисквалификатор». Версии ни одному не дано: по правилу указатель на соседа — не пересмотр.
3. Ограничение проверки записано рядом с правилом, и из него вышло само правило. Машина сверяет взаимность существующих ссылок; об отсутствующей паре она сказать не может ничего — два документа, не знающие друг о друге, для неё неотличимы от двух несвязанных. Зелёная проверка означает «нет односторонних ссылок», а не «граф полон». Отсюда добавленное следствие: пара, обнаруженная столкновением на прогоне, заводится в тот же день — машина о ней не напомнит.
О классе. План назвал Р8 «правкой», но в правилах версионирования класса ниже MINOR нет — есть только три поимённых случая «не пересмотр», и ни одна из двух содержательных правок в них не попадает. Поэтому D-09 получил v3.1, 02-versioning — v1.4, а бесплатной осталась только пара указателей, для которой такой случай как раз назван.
Старым ADR перепроверять нечего. Единственный ADR по D-09 v3.0 — ADR-0007 — вычеркнул верную ось, не послушав подсказки; U-01 · ADR-0002 написан по D-09 v1.0, когда матрицы ещё не было.
Р9 · Стадия как свойство: общее и специфичное внутри шага#
Развилка переписана 2026-09-22 после разбора. Прежняя редакция предлагала выбор между строкой в D-05 и перестановкой шагов; предложение John'а устроено иначе и лучше: шаги и их порядок остаются, внутри каждого шага сначала общее, потом специфичное по случаю со своим набором шаблонов, а там, где шаблон обслуживает несколько случаев, — пояснение, как им пользоваться в каждом.
На чём это стоит#
Довод прежней редакции — «одно наблюдение — не основание» — не выдержал пересчёта. По четырём прогонам наблюдений семь: у гринфилда не существует пометки [замер] (E-01); D-03 противоречит себе на гринфилде (E-01); D-05 появился потому, что D-02 на гринфилде неприменим; реестр копий D-07 читается наоборот; цена знания D-11 читается наоборот; порядок шагов оказался неверным (находка 7); у первого выката нечего откатывать.
Шаги при этом действительно остаются все. Ни один из четырёх прогонов не исключил ни одного шага — исключались только документы; оба списка «не планируем применять» состоят из D-NN.
Применимость оказалась не одна, а три разные#
| Вид | Пример из прогонов | Закрывается ли предложенной структурой |
|---|---|---|
| 1. Документ неприменим целиком | D-02 на гринфилде, D-05 на работающей |
Да, полностью: в шаге просто нет этого шаблона для этого случая |
| 2. Документ применим, вопрос читается наоборот | Реестр копий D-07: опрос против решения. Цена знания D-11: покупка против закладки |
Да, и лучше маршрутизации: маршрут умеет включать и выключать документ, «тот же шаблон, другое прочтение» он выразить не может |
| 3. Правило внутри документа на этой стадии не срабатывает — молча | Шестой дисквалификатор D-06 требует замера, которого нет; «откат ни разу не исполнялся» D-09 на первом выкате; нулевой вариант D-01 «расширить имеющееся», когда расширять нечего |
Нет: живёт ниже уровня шага. Пояснение может предупредить, но не может починить правило |
Третий вид дороже двух первых: в ADR-0006 дисквалификатор не сработал, и заметить это удалось только потому, что писались замечания.
Стадий три, но они не равноправны#
Набор уже называет третью — «система под изменением», и D-08 объявляет себя её первым документом. Но на гринфилде её не бывает: переходить не от чего. Значит, «под изменением» — не третья стадия рядом с двумя, а режим работающей системы, и документ, применимый к работающей, применим и под изменением, если не сказано иначе. Это правило наследования дешевле, чем три независимых списка, и его можно проверять машиной.
Р9.1 · Где живёт стадия и что делает машина#
| Вариант | Что делаем | Чем плох |
|---|---|---|
| A | Только поле «Стадия» в шапке каждого документа | Читатель шага не видит списка: чтобы узнать, что брать на W4, надо открыть одиннадцать шапок |
| B | Только перечень шаблонов по случаям внутри шага | Машина ничего не проверяет; шапки продолжают объявлять стадию четырьмя разными способами, как сейчас |
| C | И то и другое, а check.py сверяет их на равенство |
Пятнадцать строк проверки; два места вместо одного — но это одна правда в двух отображениях, а не второй источник правды |
Рекомендую C. Правило набора запрещает вторую копию тогда, когда её ничто не синхронизирует — именно этим был плох удалённый хвост 00-workflow.md. Под машинной сверкой запрет не действует.
Р9.2 · Как устроен шаг#
| Вариант | Что делаем | Цена |
|---|---|---|
| A | Общая часть плюс блок на каждый случай — во всех двенадцати шагах | Единообразно, но восемь шагов получат три одинаковых блока: место, где расхождение заведётся само |
| B | Общая часть у всех; блок по случаям только там, где различие настоящее — W1, W3, W4, W9, частично W0. У остальных одна строка «на всех стадиях одинаково» |
Неединообразно на вид, зато каждое различие настоящее |
| C | Общая часть плюс сноски вместо блоков | Сноску не читают при работе по шагу |
Рекомендую B. Пустой блок «на этой стадии ничего особенного» — приглашение заполнить его чем-нибудь; строка «одинаково» этого не приглашает.
Р9.3 · Третий вид применимости — правило внутри документа#
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Местная пометка [стадия: …] на вопросе или дисквалификаторе, который на этой стадии не срабатывает, плюс правило в мастер-шаблоне: правило, неприменимое на стадии, помечается, а не молчит |
MINOR мастеру, MINOR D-01, D-06, D-09 |
| B | Те же пометки в трёх документах, без правила в мастер-шаблоне | MINOR трём документам |
| C | Не делать: предупреждать в пояснении шага | — |
Рекомендую A. Техника уже есть в наборе — [продукт], [проба], [режим] — и добавляется без нового механизма. B чинит три известных случая и оставляет четвёртый на удачу; C оставляет правило молчащим там, где оно и молчало.
Р9.4 · Диаграмма#
| Вариант | Что делаем |
|---|---|
| A | Не делать: порядок шагов не меняется, значит маршрут у всех случаев один, и показывать нечего сверх таблицы |
| B | Таблица применимости двенадцать на три в рабочем процессе — не диаграмма |
| C | Сначала проверить, есть ли возврат между шагами, специфичный для случая (кандидат: на системе под изменением W9 вскрывает решение W3 — переезд данных меняет выбор хранилища). Если такой возврат есть — диаграмма его показывает и окупается; если нет — B |
Рекомендую C. Диаграмма окупается ровно тогда, когда показывает то, чего таблица показать не может: не «что применимо», а куда процесс возвращается. Проверка дешёвая — один проход по находкам четырёх прогонов, — и её результат определяет, нужна диаграмма или нет.
Что всё это стоит вместе#
| Что | Объём |
|---|---|
| Поле «Стадия» в одиннадцати шапках | не пересмотр — метод не меняется, старым ADR перепроверять нечего |
| Правило наследования «под изменением ← работающая» | строка в мастер-шаблоне |
| Блоки по случаям в четырёх-пяти шагах | правка рабочего процесса, версий у него нет |
Пометки [стадия: …] |
MINOR трём документам |
Проверка в check.py |
около пятнадцати строк |
Итого две-три итерации и ни одного MAJOR.
Внесено 2026-09-22 — Р9.1·C: мастер-шаблон v6.4, одиннадцать шапок, рабочий процесс, tools/check.py#
Словарь стадий и правило наследования записаны в мастер-шаблон отдельным разделом. «Под изменением» объявлено режимом работающей системы, а не третьей стадией рядом с двумя: на гринфилде её не бывает, переходить не от чего. Отсюда наследование — документ, применимый к работающей, применим и под изменением, если не сказал иного, — и отдельная пометка «под изменением» остаётся только там, где документ вне этого режима не нужен.
Побочное следствие, которого план не предвидел: это отменяет самообъявление D-08 и D-09 «документами третьей стадии» как описание места в наборе. D-08 остаётся единственным «под изменением» — но по предмету, а не по стадии: переход и есть его предмет. D-09 же применялся на гринфилде (ADR-0007), и его стадия — обе.
Поле «Стадия» заведено во всех одиннадцати шапках. Формат: значения через ·, затем — и оговорка. Машина читает только левую часть, оговорка — для читателя.
| Стадия | Документы |
|---|---|
| Только работающая | D-02 |
| Только гринфилд | D-05 |
| Только под изменением | D-08 |
| Обе | D-01, D-03, D-04, D-06, D-07, D-09, D-10, D-11 — восемь из одиннадцати |
Стадия ограничивает документ реже, чем казалось: трое из одиннадцати. Это результат разбора, а не оценка: по четырём прогонам исключения были по отсутствию предмета («переезда данных нет», «участников поперёк границ нет», «кончится умолчанием»), и ровно дважды — по стадии: D-05 в E-03 («не гринфилд») и D-02 в U-02 («истории изменений нет»). Для Р9.2 это хорошая новость: блоков по случаям понадобится мало, что и предполагал вариант B.
Вторая копия — строка «Документы шага» в каждом из двенадцати шагов рабочего процесса, со стадиями. Там, где документов нет, стоит «нет — шаг идёт по карточкам»: пустого места, приглашающего что-нибудь вписать, не осталось.
Одиннадцатая проверка сверяет шапку со строкой шага на равенство, ловит неизвестное значение стадии, документ, не названный ни в одном шаге, и документ, названный в двух. Она отчиталась зелёным сразу — поэтому я проверил её на подлоге: временно объявил D-03 только работающей, проверка выдала «шапка: «работающая», шаг: «гринфилд · работающая»», после чего файл возвращён.
Внесено 2026-09-22 — Р9.2·B: рабочий процесс, блоки по стадиям#
Блок «по стадиям» стоит на пяти шагах из двенадцати — W0, W1, W3, W4, W9; у остальных семи одна строка «на всех стадиях одинаково». Список совпал с предложенным в плане, но выведен заново, и ценнее списка оказался критерий, по которому он выводится.
Критерий: блок ставится там, где стадия меняет то, что шаг делает, а не то, как читается правило внутри документа. Второе — дело самого документа: поля «Стадия», правила о гринфилде в мастер-шаблоне или местной пометки. Без этой границы блоки размножаются: почти в каждом шаге найдётся документ, который на гринфилде читается иначе.
Два ближайших промаха названы прямо в рабочем процессе, чтобы граница была видна, а не только соблюдена: W2 — знание о потребителях на гринфилде закладывается, а не покупается; W5 — узкое место нечем подтвердить замером. Оба меняют чтение D-11 и D-03, но не меняют работу шага, и блока не получили. При первом же расширении набора спор пойдёт ровно об этих двух — теперь есть, к чему апеллировать.
«Под изменением» своей колонки почти нигде не имеет — по правилу наследования из Р9.1. Она появилась дважды: у W3, где шаг раздваивается, и у W9, где две версии работают одновременно и наблюдаемость обязана их различать.
Два дубля свёрнуты по ходу. Блок W3 повторил абзац «если система уже работает, шаг раздваивается», а блок W4 — список «два решения по стадии проекта». Правило набора запрещает вторую копию там, где её ничто не синхронизирует, и здесь синхронизировать было нечем: обе копии — проза. Уникальное содержание перенесено в блоки, абзац и список свёрнуты.
Внесено 2026-09-22 — Р9.3·A: мастер-шаблон v6.5, D-01 v2.2, D-06 v3.2, D-09 v3.2#
Правило в мастер-шаблоне названо через то, чем плохо его отсутствие: молчащее правило выглядит как пройденная проверка — ячейка «не сработал» ничем не отличается от честного «проверено, не подходит». На прогоне это заметили только потому, что параллельно писались замечания, то есть случайно.
Разобраны три формы вместо одной: правило не срабатывает (входа нет), срабатывает всегда (перестаёт различать и превращается в работу до), читается наоборот (ответ становится решением). И названа граница, которой в плане не было: правило, от которого на стадии не остаётся ничего, помечать нельзя — оно выносится в отдельный документ, как D-05 из D-02. Пометка говорит «здесь другой результат», а не «здесь можно пропустить».
Состав трёх документов разошёлся с планом в обе стороны, и оба раза — по проверке.
| Что значилось в плане | Что вышло |
|---|---|
D-06: шестой дисквалификатор требует замера, которого нет |
Закрыт раньше — правкой Р4·B в v3.0, где замер стал считаться чужим. Пометка не нужна. Вместо него помечен второй дисквалификатор: на гринфилде исполнять ещё нечего, он срабатывает на любой вариант |
D-09: «откат ни разу не исполнялся» |
Помечены два: к нему добавился «критерий отката не выражен числом» — базовой линии на первом выкате тоже нет |
D-01: нулевой вариант «расширить имеющееся» |
Как в плане. Прежде это стояло прозой в конце абзаца; добавлено, что исчезает вариант, а не вопрос |
У D-09 два помеченных дисквалификатора закрываются одним действием — нагрузочной репетицией с исполненным откатом, — и это записано отдельным абзацем: до репетиции выкатывать нельзя, и это не осторожность, а прямое следствие двух правил. ADR-0007 вывел оба вручную и пришёл к репетиции сам.
Проверка стадий расширена на пометки — тот же словарь, что у поля шапки. Это продолжение одиннадцатой проверки из Р9.1, а не двенадцатая: проверяется одно и то же множество значений в двух местах. Мастер-шаблон из проверки исключён — он описывает форму пометки и содержит образцы. Проверено на подлоге: опечатка «гринфильд» в D-01 поймана, файл возвращён.
Внесено 2026-09-22 — Р9.4·C: проверка проведена, диаграммы и таблицы не будет#
Вариант C требовал сначала проверить, есть ли возврат между шагами, специфичный для стадии, и только потом решать. Проверка — сплошной проход по пяти файлам находок, пяти планам правок, всем двадцати одному ADR, трём файлам предсказаний и рабочему процессу.
Возвратов между шагами в материале шесть. Ни один не специфичен для стадии.
| # | Возврат | Где | Стадия |
|---|---|---|---|
| В1 | W4 → W3 — два дисквалификатора D-05 сработали по уже принятым ADR-0002 и ADR-0003 |
U-02 |
гринфилд |
| В2 | W4 → W0 — дисквалификатор о кванте отсекает требование, а не разрез |
E-03 и U-02 |
работающая и гринфилд |
| В3 | W3 → W1 — 0,17 подачи в секунду обернулись 933 обращениями |
U-02, парный случай в E-02 |
обе |
| В4 | W6 → W2 и W7 → W2 — охват обещания достраивался дважды задним числом |
U-02 |
гринфилд |
| В5 | W0 ↔ W3 — «измеритель не падает с измеряемым» против одного контура хранения |
U-02 |
гринфилд |
| В6 | W5 → W1 — замер снят со схемы, которой после ADR-0001 не существует |
E-02 |
работающая |
Решающий довод — В2: единственный возврат, встретившийся больше одного раза, встретился на двух разных стадиях. Специфичность им опровергнута, а не оставлена непроверенной. Второй довод: рабочий процесс уже объявил В3 общим для стадий прямым текстом. Третий: пять возвратов из шести — в U-02, но E-01 той же стадии не дал ни одного; объясняет это ширина прогона, а не стадия.
Гипотеза развилки не подтвердилась, и это записано отдельно. Кандидат был «на системе под изменением W9 вскрывает решение W3 — переезд данных меняет выбор хранилища». Единственный прогон третьей стадии, U-01, шага W9 не проходил вовсе: слов «W9», «наблюдаемость», «эксплуатация» в его папке нет ни разу, а D-08 и D-09 писались одновременно одной записью. Ближайший похожий случай — В5 — совпадает только предметом: документ там D-10 со стадии W0, стадия гринфилд, причина — измеритель, а не переезд.
Оговорка, без которой вывод сильнее данных. Для гринфилда и работающей это «проверено и нет» по четырём прогонам. Для стадии «под изменением» это «не проверено»: сквозного прогона по ней нет ни одного. Вывод остаётся в силе до первого такого прогона — и там его надо перепроверить первым делом.
Почему не будет и таблицы. Вариант B предлагал таблицу применимости двенадцать на три. После Р9.2 она стала третьей копией одного знания: поле шапки, строка шага, блок по стадиям — и таблица сверх них. Первые две сверяются машиной, таблица не сверялась бы ничем, а правило набора запрещает вторую копию именно там, где её нечем синхронизировать. Развилка писалась до Р9.2, и её B этого учесть не мог.
Итог совпал с вариантом A — «не делать», — но пришёл по маршруту C и по другой причине: не «показывать нечего», а «всё уже показано дважды и сверяется».
Побочная находка, которой в развилке не было — кандидат в следующий план ревизии. Диаграмма рабочего процесса рисует три возврата: W5→W1, W6→W3, W11→W0. Прогонами подтверждён один и пограничным образом (W5→W1, В6); W6→W3 и W11→W0 не встретились ни разу. А два самых отчётливых — W4→W3 и W4→W0, единственный повторившийся, — на диаграмме отсутствуют. Трогать диаграмму сейчас я не стал: это вне принятых развилок.
Р10 · Артефакты, уезжающие наружу, никто не считает#
Находка 21. Квитанций оказалось три рода на одну подачу, каждая юридически значима. Родились они в трёх независимых решениях — ADR-0001, ADR-0005, ADR-0006, — каждое добавило по одной. Ни один документ не спросил, сколько их всего.
| Вариант | Что делаем | Класс |
|---|---|---|
| A | Ничего: наблюдение записано в находках | — |
| B | Правило в мастер-шаблон: если несколько решений порождают артефакты, уезжающие наружу, их перечень сводится в одном месте и входит в охват обещания | MINOR мастера |
| C | Новый документ решения о необратимых артефактах | новый документ |
Рекомендую B. C заводит документ под одно наблюдение — рано. A оставляет дыру, которая уже сработала: три квитанции появились незаметно, и заметить их удалось только на ревизии.
Внесено 2026-09-22 — мастер-шаблон v6.3, раздел «Связанные решения записываются вместе»#
Правило поставлено в раздел о связанных решениях, а не в правила заполнения: это тот же провал — потерянная сумма, только собирается она не из параметров, а из артефактов. Названо отдельным случаем прямо, чтобы не выглядело повтором.
Формулировка объясняет, почему сумма теряется: артефакт рождается внутри решения, для которого он не главное — решали про совместимость, про связность процесса, про деградацию, а наружу каждый раз уехало по одному. Признак дан машинно-проверяемый на глаз: ни одно решение не знает общего числа.
Добавлена связка, которой в плане не было: перечень входит в охват обещания, и артефакт, в него не попавший, не защищён ничем — ровно как исключённое из охвата в D-11 v2.0 по Р1. Две правки одного прогона сошлись в одну мысль, и теперь это видно из текста.
Оговорка «чем это не является» отвергает вариант C словами самого правила: свести перечень — дёшево, завести документ — нет.
Что будет после#
Три MAJOR. D-11 → v2.0 (Р1), D-05 → v4.0 (Р2), D-06 → v3.0 (Р4·B) — все три внесены. Мастер-шаблон получает MINOR по Р3, Р4, Р10 и, при выборе Р9.3·A, по Р9. Правок вышло три, а не одна. v6.3 (2026-09-22) закрывает Р3, словарную половину Р4 и Р10 — три правки чисто мастерские и независимые. v6.4 (2026-09-22) закрывает Р9.1: поле «Стадия», словарь из трёх значений и правило наследования — они нужны машинной сверке сразу и не ждут остальной работы по Р9. v6.5 (2026-09-22) закрывает Р9.3 — правило о пометке [стадия: …], внесённое вместе с тремя MINOR документов, которым пометка ставится.
Строка совместимости обновлена одному — D-06. Общее правило верно: MINOR мастера её не трогает (правило). Исключение по существу: D-06 v3.0 опирается на словарь, которого в v6.0 не было, и объявлять совместимость с v6.0 значило бы сказать неправду.
Старым ADR. У D-11 и D-05 он один и тот же — этого прогона, и он не переписывается: ADR по прежним версиям намеренно остаются. Что в них перепроверить, скажут строки истории.
Что вышло#
| Развилок | 10, внесены все |
| Итераций | 13 — Р9 заняла четыре |
| MAJOR | 3: D-11 v2.0, D-05 v4.0, D-06 v3.0 |
| MINOR документов | 7: D-04, D-06 (×2), D-09 (×2), D-10, D-01, 02-versioning |
| Версий мастер-шаблона | 3: v6.3, v6.4, v6.5 |
| Новых документов решений | 0 |
Проверок в check.py |
было 10, стало 11 |
План разошёлся с исполнением пять раз, и каждый раз из-за проверки, а не из-за вкуса:
| Где | Что говорил план | Что вышло |
|---|---|---|
Р4 |
пометка + D-06 MAJOR одной правкой |
Две итерации: словарь в мастер v6.3, дисквалификатор в D-06 v3.0 |
Р8 |
класс «правка» | Класса ниже MINOR в правилах нет — D-09 v3.1 и 02-versioning v1.4 |
Р9 |
мастер получает MINOR «одной правкой, v6.3» | Три версии: v6.3, v6.4, v6.5 |
Р9.3 |
пометить шестой дисквалификатор D-06 |
Он закрыт раньше, в v3.0. Помечен второй; у D-09 помечены два вместо одного |
Р9.4 |
таблица двенадцать на три, если возврата нет | Ни диаграммы, ни таблицы: после Р9.2 таблица стала третьей копией |
Четыре кандидата в следующий план ревизии — правила, до которых работа дошла, но которые вне принятых развилок:
- Строка совместимости и MINOR мастера. Правило «MINOR мастера её не трогает» нуждается в оговорке: кроме документа, который начал пользоваться добавленным. Один случай уже есть —
D-06 v3.0. - Ссылка на несуществующий файл не ловится ничем. Десять проверок её пропускают; сплошной разбор 2 500 ссылок сделан вручную и был чист. Кандидат в двенадцатую проверку.
- Диаграмма рабочего процесса расходится с прогонами. Из трёх нарисованных возвратов подтверждён один; два самых отчётливых —
W4→W3иW4→W0— не нарисованы. Разбор вР9.4. D-05не говорит, что делать при неснимаемом дисквалификаторе. «Пришлось отзывать требование» — вывод из обстановки, а не из документа;ADR-0004называет это прямо.