- свёртка спрашивает журнал, встречалось ли имя строго раньше по паре (received_at, id), и пишет WARN с атрибутом uncovered_new; повторные молчат. Признак выводится, а не хранится — реестр был бы второй копией факта - добавлена подкоманда `healthlog uncovered`: перечень накопленного, чтение только на чтение, экранированные имена и названные границы носителя - синк документации: ADR о выводе новизны из журнала, две записи в журнал дефектов, два правила промоутом в конвенции, терминал оператора назван адресатом недоверенного входа
4.0 KiB
Новизна имени секции выводится из журнала, а не хранится реестром
- Дата: 2026-08-04
- Источник: openspec/changes/archive/2026-08-04-aktivnaya-proverka-novyh-sekcij/design.md
Решение
Признак «имя непокрытой секции встречено впервые» не хранится: он считается
запросом к журналу — «встречалось ли имя в доставках, стоящих строго раньше этой
по паре (received_at, id)». Реестр-таблица по образцу category_value —
очевидный ответ на тот же вопрос, уже применённый в этом проекте, — отвергнут.
Почему
Цитата из источника:
Форма ответа взята у
category_value— «когда имя встретилось впервые по журналу», — а носитель другой: факт уже лежит вdelivery.uncovered_sections. Реестр здесь не добавляет ни одного сведения, он кэш запроса, а запрос идёт считанные разы за жизнь имени.
И там же, о цене реестра:
Компромисс: вторая копия факта, обязанная сходиться с колонкой при каждой пересборке, плюс миграция и новая единица хранения витрины (а значит и отпечатка). Ноль новых сведений: имя выводимо из журнала.
Третья рассмотренная форма — множество виденных имён в памяти процесса — отвергнута по инварианту «хранилище есть свёртка по журналу»: состояние стало бы функцией жизни процесса, и живой приём разошёлся бы с пересборкой в том, что считает первой встречей.
Чем платим
Ценой названы три вещи, и все они следствия выбранного носителя:
- проход по журналу на каждой доставке с непокрытыми секциями. Измерено на синтетическом журнале годового объёма: у секции, приезжающей давно, ранний выход даёт десятки микросекунд, у появившейся только что — около 52 мс на доставку, пока её не покроет отдельная задача;
- границы носителя наследуются целиком: имя, вытесненное границей списка в 32 имени, события не даёт вовсе; пересборка заполняет колонку заново и только по сохранившимся телам; покрытая разбором секция уходит из перечня;
- история не переживает удаления тел. Ретеншен, срезающий архив, унесёт с собой и записи о непокрытых секциях за те же периоды.
Когда пересматривать
Последнее и есть условие пересмотра, названное заранее: задаче ретеншена
архива реестр понадобится — именно затем, чтобы история пережила удаление тел,
и тогда это уже другая цена, а не вторая копия факта. Запрет реестра в спеке
uncovered-sections — решение этого изменения, а не запрет навсегда.