diff --git a/docs/engine/practices.md b/docs/engine/practices.md index aefe4cf..8c40b10 100644 --- a/docs/engine/practices.md +++ b/docs/engine/practices.md @@ -229,11 +229,18 @@ 3. Ввод — через мост (`walkTo`/`approach`/`press`), не через реальные клики по CSS-пикселям; взаимодействие — кнопкой действия после подхода. 4. Текст реакций мира читай из `s.lastToast` (текст + тик) — не из скриншотов. -5. Опечатка в ключе предиката `waitFor` больше не тихий таймаут: мост сразу +5. Скриншот в пробе устаревает без рендера: шаги моста (`step`/`press`/`waitFor`) + по умолчанию гоняют логику **без отрисовки**, и `page.screenshot` снимает + последний отрисованный кадр (иногда на полпробы назад — похоже на «скрин + не того состояния»). Перед скрином — `await agent.step(1, { render: true })`, + он прокатывает кадр с актуальным состоянием; саму истину проверяй снапшотом. +6. Опечатка в ключе предиката `waitFor` больше не тихий таймаут: мост сразу вернёт `{ ok: false, error: 'неизвестный ключ…' }` (список — `AGENT_SNAPSHOT_KEYS`). Если ждёшь `ok: false` без `error` в деталях — - смотрим `error`, а не таймаут. -6. Новый метод моста добавляется **в трёх местах**: `AgentApi`/`GameAgent` + + смотрим `error`, а не таймаут. При этом сам `waitFor` **не бросает** по + таймауту — возвращает `{ ok: false }`; в пробах проверяй `ok` явно, + иначе сценарий тихо поедет дальше. +7. Новый метод моста добавляется **в трёх местах**: `AgentApi`/`GameAgent` + `registerAgent` (apps/game/src/agent/GameAgent.ts) и прокси `AgentClient` (packages/engine/tools/agent-lib.mjs) — у клиента белый список методов, без строки там сценарий получит «not a function». Полный цикл сюжета —