10d5220f5e
Do 1 [test-coverage]: контроллерный тест на флаг-гейт begin-hook open() — при OFF beginRun зовётся (durable-ран независим), а streamRegistry.open НЕ зовётся (закрывает регресс: пустая entry → non-null paused attach → зависший SSE вместо 204); при ON — open зовётся с (chatId, runId). Do 2 [stability]: байт-кап очереди pending paused-подписчика. pendingBytes + overflowed на Subscriber; в paused-ветке ingestFrame при превышении SUBSCRIBER_MAX_BUFFERED_BYTES (8MB) подписчик помечается overflowed, pending чистится, он выбрасывается из entry.subscribers (как overflowed-entry). start() на overflowed → onEnd (чистый 204-эквивалент, без частичного реплея). Контракт «start() в том же тике, что attach()» задокументирован в коде — кап это структурный бэкстоп для phase-2 Redis-await шва. Юнит-тест: paused A + live B, 9×1MB > cap → A выброшен (0 доставок), B получает все 9 живьём, поздний start(A) → один onEnd без реплея. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>