diff --git a/doc/stream.txt b/doc/stream.txt index 62116c2f..921f0689 100644 --- a/doc/stream.txt +++ b/doc/stream.txt @@ -920,6 +920,12 @@ Bootstrap ограничен 15 секундами с первого запро проверяются INFO/ACCEPT/DATA. Переход к READY даёт отдельные 5 секунд для SUBSCRIBE. READY будит selector и снимает старый backoff данного пира. Подтверждённый поставщик временно допускается и выборкой кандидатов, и receive_open, независимо от задержки его Merkle-опции. +Callback принятых свойств участника Merkle/BGP помечает roster нужного канала устаревшим. Сверка выполняется +отложенно после проверки членства/эпох; несколько callbacks объединяются. Новый совместимый кандидат запускает +INFO без ожидания секундного расписания, а существующие пробы/цикл и backoff ошибок не сбрасываются. +Если новый буфер ещё заполняется и INFO latest отвергнут с POSITION, повторный обход допускается через 100 мс +в пределах фиксированного окна 5 с; транспортный backoff и обычный обход 30 с сохраняются. +Периодическая сверка roster раз в секунду остаётся резервной. Первое подтверждение поколения и переходы состояний отправляются отложенно сразу; одинаковые повторы ограничены 1 с. Объединённая работа управления выполняется после packet/NCD callbacks. Общий таймер обслуживает сроки/метрики, новые INFO/ACCEPT/READY и первый DATA/восстановленный блок будят управление без ожидания следующего тика. @@ -955,6 +961,7 @@ Relay-only экземпляр не запрашивает новую помощ test_stream_service проверяет отсутствие помощи при прямом успехе/паузе источника, автоматический fallback, дедлайн 100 мс, обе стороны гонки, поздние INFO/REQUEST проигравшего, ограничение ответов на повторы REQUEST и общий старт при n=8/r=2, выбор помощника через Merkle/INFO раньше задержанного READY без преждевременной отмены выбранной выдачи, +callback обнаружения поставщика без секундной паузы, повторные уведомления без лишних проб и заполнение раннего буфера, раздачу нескольким зрителям, общий owner с локальным viewer, остановку при уходе последнего, поздний повтор запроса до/после удаления tombstone, CANCEL до REQUEST, истечение READY без SUBSCRIBE, откат неуспешного добавления viewer, исключение relay-only кандидатов и передачу пустого подписанного END. diff --git a/doc/tasks.md b/doc/tasks.md index e81f46e8..a5164692 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,19 @@ ## Текущие задачи +[+] **Live: callback обнаружения поставщиков** — 13.10.2026: + Принятые изменения Merkle и BGP помечают roster оптимизаторов соответствующего канала устаревшим. + Сверка/пробы выполняются после callback одним объединённым отложенным проходом в uasync. + Новый доступный поставщик опрашивается сразу; существующие пробы, цикл и backoff ошибок сохраняются. + Временно пустой буфер повторно опрашивается через 100 мс в пределах фиксированных 5 с, + чтобы ранняя подписанная опция не оставляла недостающие субпотоки до обхода через 30 с. + Регрессия с настоящим Merkle/BGP и задержанным READY: до исправления проверка задержки падала, + после принятого объявления INFO получен через 6 мс. Повторные callbacks не размножают пробы; + общий старт 8/2 и освобождение всех tracked allocations проверены. + 149 тестов ядра, 43 Android-теста и desktop stream/audio timing прошли; GUI и APK собраны. + Логи: `/tmp/stream-provider-callback-{before,retry,full-check}.log`, + `/tmp/stream-provider-callback-{gui-tests,android-build}.log`. + [+] **Live: выбранная выдача отменяла помощь до READY/ACCEPT** — 13.10.2026: Первое открытие desktop 17:07:41.035 → первый кадр 17:07:44.500 заняло 3.464 с; запрос помощи отправлен через 99 мс, первый FEC через 2.490 с, KEY ещё через 0.796 с, diff --git a/src/stream/stream_optimizer.h b/src/stream/stream_optimizer.h index a3566049..cc11156b 100644 --- a/src/stream/stream_optimizer.h +++ b/src/stream/stream_optimizer.h @@ -1,5 +1,5 @@ /* Один планировщик на локальный экземпляр; handles владельцев не размножают пробы/выдачи. - * tick вызывается общим stream network timer, destroy отменяет все свои receive/probe handles. */ + * tick вызывается отложенным stream network проходом и таймером, destroy отменяет все свои receive/probe handles. */ #ifndef STREAM_OPTIMIZER_H #define STREAM_OPTIMIZER_H