• Nikitos's avatar
    Реплеи: запись ввода и воспроизведение ($.replay), тесты молчат
    · 8ad81d61
    Nikitos создал
    P2-хвост §12. Детерминизм в движке был (--seed, --fixed-dt, свои генераторы в
    $.random), но записать и проиграть сессию было нечем: к баг-репорту нельзя было
    приложить реплей, а регресс-тест «мир пришёл туда же» — поставить.
    
    * src/highlevel/replay.js: createReplay (чистое ядро) + installReplay ($.replay):
      start/record/stop для записи, play/tick/skip для воспроизведения, load/toText
      для файла, mode/length/position/dropped/header/frames/at для контроля, onEnd
      для конца; compareReplays находит первое расхождение двух записей;
    * заголовок хранит ЗЕРНО ЗАПУСКА и ШАГ ВРЕМЕНИ (engine.seed/engine.fixedDt) —
      без них воспроизведение не совпадёт; игра добавляет свои поля через start();
    * пустой кадр СОХРАНЯЕТСЯ (пропуск сломал бы соответствие кадр записи ↔ кадр
      проигрывания), несериализуемый объект становится пустым кадром, кадр больше
      4096 байт не пишется, предел 36000 кадров с честным счётчиком dropped;
    * тесты: tests/js/replay_test.mjs (11) и tests/agent/highlevel_replay_test.py
      (в движке — номер кадра, зерно запуска, шаг времени, текст записи);
    * docs/highlevel/replay.md: методы, заголовок, «что записывать» и честные
      ограничения (реплей — ввод, а не снимок мира; нет сжатия; нумерация кадров не
      сверяется при проигрывании).
    
    ПРИМЕР В ДОКЕ ИСПРАВЛЕН ПО КОДУ: сначала я написал `$.input.state()` и
    `$.input.apply()`, которых в API НЕТ. Проверил grep'ом и переписал пример на
    честный (игра собирает снимок ввода сама) — иначе это было бы очередное врание
    в документации, ровно то, что вычищал в §11.
    
    ЗАОДНО ПО ПРОСЬБЕ: тесты больше не шумят. tools/agent_client.py подставляет
    SDL_AUDIODRIVER=dummy, если драйвер не задан явно; микшер при этом работает
    по-настоящему (44.1 кГц вместо 48 кГц — выбор dummy-драйвера), проверки звука не
    ломаются. Прогнать со звуком: R2D_TEST_AUDIO=real python3 tests/agent/<тест>.py.
    
    Проверка: полный набор qjs, агентские тесты (включая новый replay), модули,
    doc_coverage, doc_claims — зелёные.
    8ad81d61