Часть #1090. Слабое место, найденное анализом, а не поломкой — и потому опасное.
Что не так
criterionVerdicts хранится в задаче. Раз записанный met остаётся met, что бы дальше ни случилось с кодом. Пчела может быть отклонена, что-то переписать, задача уйдёт на повторное ревью — и старые вердикты по неизменённым критериям останутся, хотя выводились они против другого состояния дерева.
Приёмка спрашивает acceptanceBlockReason(criteria:recorded:) и получает ответ, собранный из утверждений разного возраста. Ни одно из них не проверяется на актуальность.
Литература называет это прямо: сохранённое состояние не есть проверка — возобновление процесса, где записано «тесты прошли», повторяет записанное утверждение, не устанавливая заново, что оно относится к тому коду, который сливают.
Та же болезнь в моём собственном поведении за эту ночь: я закрывал звено по первому зелёному прогону, и трижды это оказывалось неверно.
Готово, когда
- Вердикт несёт отпечаток состояния, против которого он выведен (дерево задачи на момент ревью).
- Приёмка отвергает вердикт, выведенный против другого состояния, и называет такие критерии отдельно от непроверенных: «выводился против другого кода» это не «не проверяли».
- Повторное ревью после изменений не наследует старые вердикты молча.
- Проверка ломается, если снять привязку к состоянию.
Границы
rings/SR-00/QueenCriterionVerdict.swift и rings/SR-00/QueenDelegation.swift
Часть #1090. Слабое место, найденное анализом, а не поломкой — и потому опасное.
Что не так
criterionVerdictsхранится в задаче. Раз записанныйmetостаётсяmet, что бы дальше ни случилось с кодом. Пчела может быть отклонена, что-то переписать, задача уйдёт на повторное ревью — и старые вердикты по неизменённым критериям останутся, хотя выводились они против другого состояния дерева.Приёмка спрашивает
acceptanceBlockReason(criteria:recorded:)и получает ответ, собранный из утверждений разного возраста. Ни одно из них не проверяется на актуальность.Литература называет это прямо: сохранённое состояние не есть проверка — возобновление процесса, где записано «тесты прошли», повторяет записанное утверждение, не устанавливая заново, что оно относится к тому коду, который сливают.
Та же болезнь в моём собственном поведении за эту ночь: я закрывал звено по первому зелёному прогону, и трижды это оказывалось неверно.
Готово, когда
Границы
rings/SR-00/QueenCriterionVerdict.swiftиrings/SR-00/QueenDelegation.swift