Перейти к содержанию

E-02 · Этап 6: план ревизии#

Подготовлен: 2026-09-16 · дополнен: 2026-09-17 · на входе — 20 находок из 99-findings.md и отчёт о проверке правок E-01

Решения по Б1–Б6 приняты, правки исполнены 2026-09-17. Б1 — отвод сейчас; D-04 отвечает за саги, массовая раздача отводится явно; окончательное место для неё определит исследование. Б2 — обе, деградация первой: D-06 деградация, D-07 декомпозиция данных (материализация — один из режимов). Б3 — это тот же вопрос, что Б1: связанные применения — частный случай мастер-решения; форма ждёт исследования, пока записываются одним ADR. Б4 — придержано: третий режим в мастер-шаблон не поднят. Б5 — исследование типовых проблем и практик. Б6 — двустороннюю форму принять; встречные силы внедрены также в D-01, D-03 и D-05. Находка 17 — различение модульности и гранулярности введено в D-02.

Версии после правок: D-01 v2.0 · D-02 v4.0 · D-03 v3.0 · D-04 v3.0 · D-05 v2.0 · мастер-шаблон остался v4.0.

Дополнение от 2026-09-17. Находки 17–20 принесены разбором глав 6 и 7 Форда и Ричардса — вне прогона. Они добавили одну правку в раздел A (находка 20), расширили развилку Б2 и потребовали шестой развилки Б6.

Прогон закончен по существу: пять этапов, четыре ADR, четыре документа решений испытаны на кейсе, противоположном первому по каждой оси, которую они используют. Осталось превратить находки в правки. План устроен так же, как план E-01: то, что исполняется без обсуждения, отдельно от того, где выбор не мой.

Главный итог прогона в одной строке. Ни одна правка E-01 не откатилась, и при этом все четыре документа решений набрали на MAJOR. Это не противоречие, а ровно то, ради чего второй кейс и брался: правки были верны, но сделаны по одному случаю и потому неполны.


A. Делаю сам — правки следуют из находок однозначно#

Тринадцать находок из двадцати не содержат развилки: они называют ошибку и способ её исправить.

Находка Правка Документ
2 Уточнить, чьё соотношение чтений к записям. Вопрос 2 спрашивает про соотношение, не говоря чьё; системное и для конкретного хранилища могут быть перевёрнуты друг относительно друга. Спрашивать про это хранилище, а системное приводить отдельно и помечать как контекст D-01, вопрос 2
3 Объём может быть параметром, а не данностью. Если он зависит от нашего выбора (длина материализованной ленты, глубина истории, срок хранения), сначала назвать параметр и метрику, которая его задаёт, и лишь потом заполнять ось D-01, вопрос 3
4 Добавить вопрос о существующей декомпозиции и правило: текущий разрез сам проходит через дисквалификаторы наравне с кандидатами. Без этого нулевой вариант «оставить как есть» не формулируется D-02, раздел 1
5 Назвать порог связности изменений — около 80 % задач в одной границе, с оговоркой, что это ориентир для разговора, а не константа приёмки D-02, раздел 3
6 Разделить строку «по поддомену и ограниченному контексту» на две формы с разными условиями применимости: поддомен — пространство задачи, ограниченный контекст — пространство решения; совпадение это цель, а не данность D-02, раздел 4
7 Назвать Эванса прямо в критерии «по языку», а не только в источниках: граница контекста проходит там, где ломается единый язык. Без имени критерий читается как бытовая эвристика D-02, раздел 4
9 Заменить порог «дольше часа» на произведение длительности на частоту. Если экземпляры процесса есть в любой момент, перезапуск теряет процесс независимо от того, живёт он час или тридцать секунд D-04, раздел 2
11 Считать независимых потребителей события, а не шаги нашего процесса. Дисквалификатор «пять и более участников» при хореографии через общую шину не сработает никогда, а неотлаживаемость приходит именно оттуда D-04, раздел 2
12 Третий ответ у проверочного вопроса про инициатора: «инвариант закрывается на другом пути». Не «ответ нужен» и не «уведомим потом», а «этот процесс вообще не про этот инвариант» D-04, раздел 1
13 Снять противоречие между дисквалификатором «устарелость недопустима» и умолчанием. Сейчас они предписывают одно и то же теми же словами, а дисквалификатор при этом говорит «это уже не умолчание». Развести: умолчание допускает потерю инвалидации, здесь она недопустима, и разница — в обязательной сверке и в TTL как верхней границе ущерба, а не в стратегии D-03, разделы 2 и 3
14 Сказать, что отклонения складываются, а цены при этом — нет. Добавить абзац после таблицы: при наложении двух отклонений цену надо пересчитывать, а не суммировать по строкам; одно отклонение способно погасить цену другого D-03, раздел 3
20 Добавить дисквалификатор об архитектурном кванте: разные цели по доступности у частей, лежащих в одном кванте (общая база, общий выкат, синхронная связь на каждой операции), недостижимы — сколько бы ни стояло в требованиях. Проверять до сравнения кандидатов, вместе с прочими организационными D-02, раздел 2
16 Назвать вторую цену локального кэша: его отказ совпадает с перезапуском процесса, то есть с плановым выкатом. Прогрев перед приёмом трафика — обязательная работа, а не улучшение D-03, раздел 3

Плюс хозяйственное: занести итоги обоих прогонов в 96-backlog.md таблицей «было / стало».


B. Решаешь ты — шесть развилок#

Б1. Что делать с D-04, когда процесс не сага (находки 8 и 10)#

Массовая раздача одного шага не классифицируется на входе документа и не получает смысла внутри него. Это самая крупная находка прогона, и способов её закрыть три.

Вариант За Против
а. Явный отвод — строка в разделе 1: «один шаг, повторённый многократно, — вне пространства восьми ячеек» Дёшево, честно, сохраняет закрытость множества — главное достоинство документа Отвести мало: настоящие вопросы раздачи (чанк, курсор, приоритет) остаются без дома
б. Новый документ про производные данные Даёт дом и раздаче, и материализации, и списку крупных подписок — три случая за один прогон Крупная работа; пока не написан, отвод всё равно нужен
в. Четвёртая ось в D-04 Всё остаётся в одном документе Ломает то, ради чего документ третьего типа и заводился: множество перестаёт быть закрытым и полным по построению

Моя рекомендация: а — сейчас, вместе с правками раздела A. И б — отдельным документом, см. Б2. Вариант в я бы не брал: закрытость множества здесь ценнее полноты охвата, а раздача от неё всё равно не выигрывает.

Б2. Два кандидата на D-06, и оба потребованы дважды#

Кандидат Кто потребовал Сколько раз
Деградация и поведение при отказе Дисквалификатор D-03 «система не переживает отказа кэша в пик» Дважды: E-01 (схема зала) и E-02 (досбор постов)
Материализация производных данных Отсутствие документа под центральное решение кейса Дважды в одном прогоне: сама лента и список крупных подписок

Оба блокируют уже принятые решения, а не будущие: без деградации нельзя вводить кэши, которые уже описаны в двух ADR; без материализации два решения E-02 приняты вне метода.

Вариант Следствие
Деградация первой, материализация второй Деградация меньше и подтверждена на двух непохожих кейсах. Материализация крупнее и, вероятно, заберёт часть вопросов у D-01, D-03 и D-04 — её лучше писать после их правок, а не до
Материализация первой Закрывает больший пробел сразу, но родится до правок и по старому шаблону — ровно та ошибка, которой мы избежали в E-01
Только деградация, материализацию отложить Набор остаётся тоньше, но два случая из одного прогона говорят, что откладывать больше нечего

Моя рекомендация: обе, деградация первой. И присвоить номера сразу — D-06 деградация, D-07 — чтобы не повторить коллизию, случившуюся в E-01.

Находка 19 расширила второго кандидата. «Материализация производных данных» — частный случай декомпозиции данных: вопроса «делятся ли сами данные и по каким критериям» не задаёт ни D-01, ни D-02, а в E-02 он решался дважды внутри чужих документов. У Форда и Ричардса под это готовый костяк — шесть сил дезинтеграции и две интеграции. Отсюда подвопрос: назвать D-07 «Декомпозиция данных» с материализацией как одним из режимов, или держать два документа на общем списке критериев. Моя рекомендация — один документ: разделять их сейчас значит повторить ошибку D-02, который два прогона отвечал на два разных вопроса, не имея слов для разницы (находка 17).

Б3. Форма записи для связанных применений D-03 (находка 15)#

Правило «одно узкое место — одно применение» верное и работает. Но три куска одного пути чтения делят бюджет памяти и вытекают из одного числа, а форма записи (пять строк на применение) предполагает, что они независимы.

Вариант Следствие
а. Абзац в разделе 6: связанные применения записываются одним ADR — общий контекст, несколько коротких записей, общие последствия Дёшево, ровно то, что пришлось сделать вручную на этапе 5
б. Завести отдельное понятие «связка решений» в мастер-шаблоне Общее правило вместо частного; но пока связка встретилась один раз
в. Ничего не менять Каждый решит сам, и половина потеряет сумму

Моя рекомендация: а. Вариант б — заманчиво, но обобщать по одному случаю мы уже пробовали, и E-02 показал, чем это кончается.

Б4. Поднимать ли две находки в мастер-шаблон#

Находка 10 вводит третий режим работы документа решения: помимо «даёт ответ» и «вне области применения» есть «применим и бесполезен» — координата определяется, и из неё ничего не следует. Находка 15 — про форму записи связанных применений. Обе не про D-03 и не про D-04, а про метод вообще.

Вариант За Против
Поднять в 00-template.md (v5.0) Общие правила, оставленные в частном документе, расходятся — это уже было с ADR-шаблоном, который жил внутри W11 и разошёлся с D-01 Третий режим виден пока на одном примере
Оставить в D-03 и D-04 Честнее по числу наблюдений Следующий документ третьего типа наступит на то же

Моя рекомендация: поднять третий режим (находка 10) — он про природу решений, а не про раздачу. Форму записи (находка 15) оставить в D-03, как в Б3.

Б5. Что дальше после этапа 6#

Вариант Что проверит
Третья стадия — «система под изменением» Пласт, которого нет вовсе. Оба прогона кончились миграцией — strangler fig и перенос графа подписок в E-02, сосуществование путей чтения в обоих, — и ни одного документа под это нет. Миграция уже дважды оказалась самым рискованным шагом принятого решения и ни разу не была решением сама
E-03 — третий кейс Подтвердит правки E-02. Но все четыре документа сейчас идут в MAJOR: третий прогон по ним — это проверка почти новых документов, а не проверка сходимости
Остальные недостающие решения Авторизация, ключ шардирования, контракт API. Ширина вместо глубины

Моя рекомендация: третья стадия. И к ней отдельный вопрос, который стоит держать в виду: если E-03 снова даст MAJOR всем документам, это будет означать не «нашли ещё», а отсутствие сходимости — то есть что форма документа решения не стабилизируется на кейсах и её надо менять, а не дополнять.

Б6. Принимать ли двустороннюю форму для D-02 (находки 17 и 18)#

Форд и Ричардс строят решение как баланс двух наборов сил: силы дезинтеграции (за разделение) против сил интеграции (за объединение). Наша форма другая: вопросы → дисквалификаторы → оси → решение. Разница не косметическая — у нас нет места для силы, тянущей назад, и «общий код» поэтому отсутствует целиком.

Вариант За Против
а. Добавить раздел «силы интеграции» в D-02, сохранив остальную форму Дёшево, закрывает находку 18 точечно: общий код, отношения в данных, рабочий процесс как встречная сила Форма становится гибридной: часть решения через оси, часть через силы
б. Перестроить D-02 на двустороннюю форму целиком Для вопроса «делить или не делить» она честнее: это не выбор из N вариантов, а баланс Крупная переделка, и у нас уже есть проверенная форма, которая на двух кейсах сработала
в. Оставить как есть, дописав недостающие оси Минимум изменений Ось «общий код» без встречной силы читается как «чем меньше общего кода, тем лучше» — это неверно

Отдельно — находка 17: D-02 не различает модульность (где линия) и гранулярность (насколько мелко) и на двух прогонах ответил на два разных вопроса. Это не обязательно новый документ; возможно, достаточно словаря и вопроса «что мы сейчас решаем» в начале.

Моя рекомендация: а — раздел сил интеграции в D-02, плюс словарь модульности и гранулярности в шапку. Двусторонняя форма целиком — в новом документе про данные (Б2), где она уместнее всего: там вопрос ровно «делить или держать вместе». Так мы её и испытаем, не ломая работающее.


C. Что намеренно НЕ делаем#

ADR-0001…0004 не переписываются. Их поле «Метод» указывает на D-01 v1.1, D-02 v3.0, D-04 v2.0, D-03 v2.0, и это остаётся верным навсегда. В E-01 это было решением на будущее; теперь у него есть проверка — записи E-01, написанные по старым версиям, за весь прогон E-02 ни разу не ввели в заблуждение, а история версий отвечала на вопрос «что перепроверять» без обращения к автору.

Прогон не переделывается под новые версии. Если правки верны, повторный прогон даст те же решения.

D-03 и D-04 не сводятся в один документ, хотя раздача и кэш здесь переплелись теснее некуда: порог гибрида живёт в двух ADR сразу и определяет и нагрузку на запись, и стоимость чтения. Соблазн объединить есть, и он ошибочен — это ровно то размывание ответственности, против которого была принята позиция при разделении D-02 / D-05. Связь между решениями лечится полем в ADR, а не слиянием документов.

Находка 10 не чинится расширением пространства D-04 — см. Б1.


D. Порядок исполнения#

  1. Ответы по Б1–Б6.
  2. Правки раздела A, сгруппированные по документам: D-01 → D-02 → D-03 → D-04 → 00-template.md (если Б4 «поднять»).
  3. Прогон check.py; совместимость MAJOR-версий с мастер-шаблоном.
  4. Итог обоих прогонов в 96-backlog.md: таблица «было / стало» по каждой находке, E-01 и E-02 вместе.
  5. Новые документы из Б2 — отдельными шагами после правок.

Предварительная арифметика версий, если правки раздела A пройдут целиком:

Документ Было Станет Почему MAJOR
00-template.md v4.0 v5.0 Третий режим работы документа решения — если Б4 «поднять»
D-01 v1.1 v2.0 Соотношение чтений к записям может быть перевёрнуто для отдельного хранилища, а объём может быть выбираемым параметром. И то и другое меняло исход на этом прогоне
D-02 v3.0 v4.0 Без вопроса о существующей декомпозиции нулевой вариант не формулируется; без порога связности доля не интерпретируется; дисквалификатор об архитектурном кванте отменяет разрезы, принятые при разных целях доступности внутри одного кванта
D-03 v2.0 v3.0 Читатель, понявший дисквалификатор «устарелость недопустима» как запрет кэшировать, мог отказаться от кэша там, где умолчание подходит
D-04 v2.0 v3.0 Порог «дольше часа» оставлял состояние в памяти там, где это недопустимо; отсутствие третьего ответа про инициатора строило синхронный участок, которого не должно быть

Все четыре документа решений идут в MAJOR по итогам второго кейса. Стоит сказать это прямо в истории версий каждого: правки E-01 были верны — ни одна не откатилась, — но сделаны по одному случаю. Второй случай не опроверг их, а показал, чего в них не хватало. Это и есть ответ на вопрос, зачем нужен был второй прогон.