Files
healthlog/docs/conventions/testing.md
T
av d79189be18 docs: документация переведена на канон av-dev-pm
- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги
  переименованы с транслита на английские, 85 ссылок поправлены
- conventions.md разобран в docs/conventions/, local-research.md — в
  docs/research/, review-journal.md — в docs/review.md с разделом настройки
  конвейера; заведены security.md, adr/ и .pm.json
- шаг docs.py check добавлен в task gate; поведение в architecture.md помечено
  девятью маркерами долга, database.md получил настройки с числовым значением
2026-08-03 17:14:53 +03:00

3.5 KiB

Тесты

  • Тесты на разбор формата HAE держим на реальных пакетах, сложенных в testdata (с вычищенными токенами). Документация формата ненадёжна — источником истины служат живые данные.
  • Проверяем идемпотентность: повторный разбор того же пакета не меняет витрину.
  • Где код выбирает между двумя версиями одних данных, тест обязан прогнать обе стороны и хотя бы одну перестановку трёх. Пример на паре доказывает коммутативность и молчит про ассоциативность, а сломаться правило может именно на ней: полнота — частичный порядок, тай-брейк — тотальный, и их попарная свёртка дала нетранзитивное отношение победы, из-за которого одна и та же доставка меняла витрину при каждой пересборке. Ревью дизайна этого не увидело, ревью кода увидело только перебором троек. Правилом линтера не выражается — отсюда проза.
  • В тот же перебор обязана входить версия с содержимым, равным одной из уже присланных, и пара «равная каноническая форма, разные байты». Три версии с разными хешами ветку «содержание равно» не посещают ни разу — а именно на ней устаревал провенанс, и живая витрина расходилась с пересборкой молча. Пара с равной формой ловит другое: неединственный минимум, при котором победителем оказывается просто первый в срезе, то есть порядок элементов на проводе.
  • Изменение правила разбора или слияния сопровождается замером на живом архиве, и ответ «пересворачивать нечего» произносится с числом. Утверждение без числа не отличается от предположения, а цена ошибки здесь — необратимое решение о судьбе тел.
  • Тест «в логе нет значения» проверяет запись без служебных полей, а не сырой буфер. Метка времени содержит доли секунды, поэтому искомая подстрока находится в ней сама: проверка на «5.1» краснела примерно раз на сотню прогонов от хода часов, а не от утечки. Разбираем запись, выбрасываем time и ищем в остатке. Правило общее — таких тестов будет больше (токены, тела запросов, координаты объектов).