diff --git a/applications/PoP/roomtest/TASKS_OPEN.md b/applications/PoP/roomtest/TASKS_OPEN.md
index 4c850d6..b45398f 100644
--- a/applications/PoP/roomtest/TASKS_OPEN.md
+++ b/applications/PoP/roomtest/TASKS_OPEN.md
@@ -874,6 +874,59 @@ tp/10 у факелов таблицей, пустой слот соперник
## P1 — берётся в любой момент
+### PERF-SWEEP. Поиск узких мест по ВСЕЙ игре, а не в одной сцене
+
+**Постановка (пользователь, 2026-08-18):** «пока мы тестируем на регресс
+только одну сцену; надо придумать механизм проверки узких мест по всей
+программе — ручной проход уровня, в логи пишутся такты каждой фазы с
+информацией, в какой комнате это происходит (возможно, в каком тайле Кид),
+ищем максимумы по уровню и оптимизируем уже конкретную комнату».
+
+Сцена 13/23 закрывает ПИК, но она одна: механики, которых в ней нет
+(чомперы, бой, мышь, зеркало, толпа стражей), в бюджет никто не проверял.
+
+#### Чем НЕЛЬЗЯ это делать — и почему
+
+Тем, чем меряем сейчас. Брейкпоинты с `printf ...; g` на четырёх границах
+фаз роняют эмуляцию в проценты от реального времени — **ручной проход так не
+сыграть**, а именно ручной проход и есть суть задачи. Плюс две мелочи,
+которые уже стоили времени: адреса зондов надо переснимать после КАЖДОЙ
+пересборки (`.lst` + база модуля), а кольцо `clog` переполняется — сегодня
+первый прогон принёс один «покой», каскад успел вытесниться за 75 с
+ожидания.
+
+#### Куда смотреть
+
+**Вариант А — тап на порт бордюра в Lua-мосте (рекомендую).** `PROF(n)`
+это `out (0xFE), a`, то есть границы фаз УЖЕ размечены в железе.
+`install_write_tap` на порт даёт колбэк без остановки CPU — накладные
+несравнимо меньше брейкпоинта, играть можно. Главный бонус: **тап не
+привязан к адресам кода**, переснимать после пересборки нечего. «Где» берём
+оттуда же: Lua читает `cur_room` и `Kid.curr_col/curr_row` по адресам из
+`roomtest.map` (их выдавать в маленький файл при сборке, чтобы не парсить
+map руками). Пишем CSV: кадр, комната, тайл Кида, синяя/зелёная/циан/работа,
+период.
+
+**Вариант Б — программа меряет себя сама, в РАСТРАХ.** Тактов Z80 изнутри
+не видно, но нам они и не нужны: бюджет сформулирован в растровых кадрах, а
+позицию луча видно поллингом бита 5 порта 0xFE (то же, чем живёт
+`gfx_wait_vsync`). Разрешение ~1/256 кадра ≈ 1 700 тактов — для поиска
+узких мест с запасом. Дороже варианта А по месту в резиденте, но
+единственный, который работает **на живом железе**, а не только в MAME —
+а такт MAME это 2,4× номинала Z80 (memory `sprinter_wait_states_2x`), и
+рано или поздно сверяться придётся с железом.
+
+#### Что считать результатом
+
+Не «дамп кадров», а сводка: максимум каждой фазы **по комнатам**, число
+кадров сверх 400 000 и сверх растрового кадра 430 000, и топ комнат по
+худшему кадру. Дальше — точечная оптимизация той комнаты, как делали с
+13/23.
+
+Смежное: сцена и метод — [`../docs/perf_l13_room23.md`](../docs/perf_l13_room23.md);
+фазы — [зелёная](../docs/perf_green_phase.md), [циан](../docs/perf_cyan_phase.md).
+
+
### T-RENDER. Тесты слоя отрисовки: «в запечку не попадает транзиент»
**Откуда взялось** (пользователь, 2026-08-18, по итогам