Skip to content

tests: конкурентный стресс-гарнесс ClientPool/lease + контракт lease lifecycle #1228

Description

@axisrow

Мотивация (замер по истории проекта)

Гонки/локи/lease — 18 фиксов за 4 месяца, самый дорогой класс багов: дизайн-уровень, линтером не ловится, сейчас единственная защита — dual-review (причём Codex стабильно ловит глубже: #1188 use-after-disconnect в pool, #1189 race-окно в acquire-пути / late reservation, #1145 TOCTOU phone+session из разных await). Каждый такой баг находится только на ревью или в проде — направленных тестов на конкурентность нет.

Что сделать

  1. Направленный конкурентный стресс-гарнесс для ClientPool/lease и DB write-lock:
  2. Контракт lease lifecycle: зафиксировать инварианты (кто владеет клиентом между await-точками; что запрещено после disconnect; когда phone и session обязаны читаться атомарно) в докстрингах pool/lease + контракт-тест, чтобы новые правки сверялись с контрактом, а не с интуицией.
  3. Закрепить процесс в CLAUDE.md: pool/lease/security PR → обязательно оба ревьюера (Claude + Codex); при расхождении вердиктов — своя сверка, верить более глубокому.

Ограничения

  • Тесты fake/harness-first, без реального Telegram (политика real-TG не меняется).
  • Гарнесс не должен быть флейковым под -n auto: детерминированные барьеры вместо sleep-таймингов.

Verification

  • Каждый регресс-гард мутационно проверен (красный на до-фиксном коде).
  • Полный прогон (parallel + serial) зелёный, без новых флейков.
  • Контракт-тест lease lifecycle существует и падает при нарушении инварианта.

Связано

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions