- каждая запись каталога задач получила тип вместо тега kind: и префикса заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок секций канонический - поправлены протухшие факты: нереализованные маршруты Read API, MCP и `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию диффа, периметр перестал дублировать security.md - замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек storage и parsing
3.4 KiB
✨ Хранить счётчики слияния вне логов
- Тип: feature
- Категория: Инфра
- Зачем: Единственный след несравнимых наборов — строка WARN в docker-логе с ротацией 3×10 МБ: событие может произойти и не оставить ничего
- Теги: goal:observability
Вынуто ревью кода задачи pravilo-sliyaniya-tochek (профиль deep, проход
негативного пространства, подтверждено эксплуатационным).
Двигает строку «Завершения» цели: «Счётчики слияния переживают ротацию логов».
Что не так
Решение не реализовывать объединение полей при несравнимых наборах стоит на
одном аргументе: «вместо реализации — счётчик, который скажет, если событие
наступит». Сказать он может только в одну сторону — строкой WARN в stdout
контейнера.
docker-compose.yml держит json-file с max-size: 10m, max-file: 3. При
~288 доставках в сутки это порядка кварталов, а ожидаемая частота события —
«ни разу за 99 доставок». Штатный сценарий: событие происходит ночью, логи
никто не грепал в этот месяц, строка уходит в ротацию, и в системе не остаётся
ни одного свидетельства. Ни колонки в delivery, ни /stats, ни файла.
То есть обещание «событие будет видно, а не додумано» на практике не выполняется.
Что делать
Положить overwrites и incomparable в строку delivery — миграция плюс
запись в FinishParse, которая эту строку всё равно трогает. Тогда «было ли
когда-нибудь несравнимо» это один SELECT, живущий столько же, сколько
витрина.
Заодно стоит решить смежное, найденное тем же проходом: сегодня в логе
неразличимы «правило полноты сработало» и «всё ушло в тай-брейк». Два разных
состояния мира дают одинаковую картину overwrites=N, incomparable=0, то есть
отказ правила выглядит как здоровая работа. Отдельный счётчик исходов
Superset/Subset рядом с Overwrites это закрывает.
Связано
- stats-endpoint — то же наблюдение нужно и там.
- rod-agregacii-i-katalog — придёт к вопросу о тай-брейке и потребует эксплуатационной истории, которой без этой задачи не будет: мерить придётся снова по архиву, а он к тому моменту подрезан.