• Nikitos's avatar
    Перезапуск скриптов на границе кадра: $.script
    · 6633e54a
    Nikitos создал
    Пробел из docs/TASKS.md §12.5 (неблокирующий hot reload). Раньше перезапуск
    происходил ПРЯМО В МОМЕНТ обнаружения правки или нажатия F5: старый рантайм
    уничтожался посреди обработки события, и кадр оставался недоигранным.
    
    * r2d_script_request_reload()/r2d_script_take_reload_request(): запрос копится,
      а исполняется главным циклом после того, как кадр отрисован и профайлер
      закрыт — JS-вызовов в этом кадре больше не будет;
    * F5 и слежение за файлами теперь ЗАПРАШИВАЮТ перезапуск, а не делают его
      сразу; в журнал идёт причина (правка файлов, F5, текст игры); первый запрос
      важнее последующих;
    * если новый код не загрузился, движок пишет ошибку и продолжает работать со
      старым рантаймом (r2d_script_reload возвращает false — это уже было);
    * $.script: request/pending/hotReload/count; биндинги engine.requestReload,
      engine.reloadPending, engine.hotReload.
    
    Честно задокументировано главное ограничение: перезапуск уничтожает весь
    JS-heap, поэтому состояние надо сохранять через $.save/$.fs — «частичной
    замены модуля» не появилось.
    
    Проверка: tests/agent/highlevel_reload_test.py (8 проверок: запрос ждёт
    границы кадра, в том же кадре рантайм отвечает, после кадра запрос снят и
    игра загрузилась заново), полный набор qjs и агентских тестов зелёный.
    6633e54a