Skip to content

Вердикт живёт вечно: приёмка принимает записанное утверждение, а не заново выведенное #1126

Description

@gHashTag

Часть #1090. Слабое место, найденное анализом, а не поломкой — и потому опасное.

Что не так

criterionVerdicts хранится в задаче. Раз записанный met остаётся met, что бы дальше ни случилось с кодом. Пчела может быть отклонена, что-то переписать, задача уйдёт на повторное ревью — и старые вердикты по неизменённым критериям останутся, хотя выводились они против другого состояния дерева.

Приёмка спрашивает acceptanceBlockReason(criteria:recorded:) и получает ответ, собранный из утверждений разного возраста. Ни одно из них не проверяется на актуальность.

Литература называет это прямо: сохранённое состояние не есть проверка — возобновление процесса, где записано «тесты прошли», повторяет записанное утверждение, не устанавливая заново, что оно относится к тому коду, который сливают.

Та же болезнь в моём собственном поведении за эту ночь: я закрывал звено по первому зелёному прогону, и трижды это оказывалось неверно.

Готово, когда

  • Вердикт несёт отпечаток состояния, против которого он выведен (дерево задачи на момент ревью).
  • Приёмка отвергает вердикт, выведенный против другого состояния, и называет такие критерии отдельно от непроверенных: «выводился против другого кода» это не «не проверяли».
  • Повторное ревью после изменений не наследует старые вердикты молча.
  • Проверка ломается, если снять привязку к состоянию.

Границы

rings/SR-00/QueenCriterionVerdict.swift и rings/SR-00/QueenDelegation.swift

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions