- свёртка спрашивает журнал, встречалось ли имя строго раньше по паре (received_at, id), и пишет WARN с атрибутом uncovered_new; повторные молчат. Признак выводится, а не хранится — реестр был бы второй копией факта - добавлена подкоманда `healthlog uncovered`: перечень накопленного, чтение только на чтение, экранированные имена и названные границы носителя - синк документации: ADR о выводе новизны из журнала, две записи в журнал дефектов, два правила промоутом в конвенции, терминал оператора назван адресатом недоверенного входа
4.9 KiB
MODIFIED Requirements
Requirement: Значения точек не попадают в логи
Данные о здоровье чувствительнее токенов. Система MUST NOT писать значения
точек, содержимое сущностей и тела доставок в записи лога уровня выше DEBUG.
Содержимое сущности здесь не менее чувствительно, чем значение точки, а местами
более: маршрут тренировки — это геотрек до дома, а labels и associations
записи состояния разума — эмоциональные метки. Разрешены координаты:
идентификатор и род сущности, метка времени, идентификатор доставки — они
описывают, что случилось, а не что измерено.
Непокрытые секции называются в логе именами ключей: имя секции — это форма
пакета, а не измерение. Содержимое секции в лог не попадает ни при каком уровне
выше DEBUG. Имена идут структурным атрибутом, а не склейкой в текст сообщения:
кодировщик экранирует управляющие символы, и имя из чужого тела не разрывает
построчный разбор логов. То же относится к идентификатору сущности: он приходит
из чужого тела и ограничен по длине при разборе.
Частичный разбор уровня записи не повышает: partial — установившееся состояние
половины потока (53 доставки из 118), и постоянный WARN обесценил бы уровень.
Повышает уровень другое, и оснований два:
- срабатывание границ списка: тело с сотнями секций или с именем длиннее предела на HAE не похоже вовсе;
- первая по журналу встреча имени непокрытой секции — событие однократное за всю жизнь имени, и правила его живут в capability наблюдения за непокрытыми секциями. Здесь оно названо, чтобы перечень оснований оставался полным: иначе следующий читатель снимет ветвь как незаказанную.
Scenario: Разбор доставки логируется без значений
- WHEN доставка разобрана
- THEN запись лога содержит счётчики (метрик, точек, объектов, сущностей) и идентификатор доставки
- AND не содержит ни значений точек, ни имён устройств
Scenario: Удержанная обеднённая версия логируется координатами
- WHEN приехавшая версия сущности отклонена как теряющая содержание
- THEN запись
WARNсодержит идентификатор и род сущности - AND не содержит ни точек маршрута, ни того, какие поля потерялись
Scenario: Непокрытые секции названы именами ключей
- WHEN доставка содержит непокрытую секцию
- THEN запись лога содержит имена непокрытых ключей отдельным атрибутом
- AND не содержит ничего из содержимого этих секций
- AND уровень записи из-за одной лишь частичности не повышается
Scenario: Границы списка сработали
- WHEN список непокрытых ключей усечён по числу имён или по длине имени
- THEN запись лога имеет уровень
WARN - AND содержит число отброшенных имён
Scenario: Имя непокрытой секции встречено впервые
- WHEN доставка принесла имя непокрытой секции, которого не было ни в одной доставке раньше неё в журнале
- THEN запись лога имеет уровень
WARN - AND содержит имя отдельным атрибутом новых секций