Визуальные проверки приносят пользу только тогда, когда понятно, кто, что, когда и на каком основании одобрил. Через полгода никто не вспомнит, почему эталон поменялся именно в тот день. Журнал аудита отвечает на этот вопрос: каждое значимое решение оставляет в нём запись, и записи эти неизменяемы.
Что попадает в журнал
Запись появляется не от каждого нажатия, а от каждого значимого изменения. В журнал попадают:
- Вердикты по снимкам и отзыв одобрения.
- Создание эталона при первом прогоне, его одобрение, удаление, продвижение на другую ветку и ответвление.
- Вариации: создание, удаление, восстановление, продление срока, разбор просроченных.
- Изменения настроек: правка конфигурации, переопределение порога сравнения, подтверждение чек-листа снимков, смена бюджетов ИИ.
- Массовые приёмы безопасных отличий — одной записью со списком затронутых снимков.
- Действия над сборками: пометка провалом, повтор, удаление.
- Изменения доступов: пользователи, роли, ключи API, учётные данные, переменные, среды.
- Разбор сбоев и починки тестов: вердикты групп, применение и откат предложенной починки.
- Сама выгрузка журнала: то, что кто-то выгрузил историю, — тоже факт, который стоит помнить.
Отборы
В журнале быстро становится много записей, поэтому нужное ищут отборами. Можно отобрать по автору, по источнику (человек, ИИ или система — так подсказку модели нельзя спутать с решением человека), по семейству действий, только одиночные или только массовые, и за период: последние недели или свой диапазон дат.
У каждой записи видно, что было до и что стало после, а также причину, если её указали. Поля «до» и «после» показываются как обычное сравнение текста — сразу заметно, что именно поменялось. Автор записи — замороженное имя: даже если пользователя потом удалили, история остаётся читаемой.
Массовые действия и риск
У массового приёма безопасных отличий есть постоянная пометка о риске — она не исчезает со временем. Рядом видно, сколько снимков было принято одним действием. Запись можно раскрыть до отдельных снимков, чтобы понять, что именно попало под массовое решение. Если по каким-то элементам отдельных записей нет, так и написано: действие просто перечислило свои цели внутри себя.
Особые отметки
Некоторые записи получают отметку, которая сама по себе важна:
- Без дизайн-одобрения — отличие общих частей интерфейса одобрил человек без отметки дизайн-ревьюера. Отметка вычисляется при просмотре, а не хранится в записи, поэтому её нельзя «потерять» правкой данных.
- Деградированный режим — решение приняли, когда часть продукта работала плохо (например, не отвечала база). Это объясняет, почему в тот период массовые действия были недоступны.
- Пользователь удалён — автора записи в системе больше нет, но его имя сохранено: журнал не теряет историю вместе с учётной записью.
Выгрузка
Отобранные записи выгружаются в двух видах: таблицей для электронных таблиц и файлом для программ. Выгрузка не «всё, что есть», а именно то, что осталось после отборов. Если записей слишком много, выгрузка отклоняется и называет их число — нужно сузить отборы. Так из журнала невозможно случайно вытащить весь архив целиком.
Чего в журнале нет
Записи журнала нельзя изменить или удалить — ни одну. Это не «сложно», а невозможно: журнал существует ровно для того, чтобы на него можно было опереться в спорной ситуации. Если какое-то действие было ошибочным, оно не стирается — вместо этого появляется новая запись, которая объясняет отмену.
Дальше: как разбирать упавшую сборку, когда падений много, — в разделе Разбор проблем сборки.