Матрица проверок · 2026-10-18

Свет, модель и план.
Что уже проверено.

У каждой проверки есть шаги, ожидаемый результат и подтверждение. Так видно, что исправлено и что ещё требует отдельного испытания.

24 подтверждено
0 ожидает CI
2 не запускали

«Подтверждено» относится к указанному методу и среде. Программный WebGL в CI не заменяет проверку на физическом телефоне.

Фактический кадр объёмной комнаты из WebGL-рендера
Room Control · кадр из 3D-рендераОткрыть модель ↗
Фактический кадр ночного храма из облегчённого 3D-рендера
Quiet Hours · кадр из 3D-рендераОткрыть модель ↗

Среды проверок

Рендер сцен

Chromium / ANGLE SwiftShader, программный WebGL в GitHub Actions; 1200×800, 390×520, 320×520. Полный bloom храма дополнительно проверен при 1200×800.

Логика и материалы

Node.js: реальные объекты Three.js, геометрия, материалы и источники света; GPU и Canvas2D подменены. Контроллер проверен с моделью DOM.

Программа обучения

Chromium 1440×960, 390×844, 320×740. В проверках iframe используется тестовый дочерний документ. Пиксели 3D проверяются отдельно в репозиториях сцен.

Firefox и WebKit на Linux

Firefox 141.0 и Playwright WebKit 26.0 на Ubuntu, Xvfb, Mesa llvmpipe. Каждый движок исполнил 48 проверок рендера двух сцен. В отчётах сохранены версии и GL-диагностика; маскированное имя GPU браузера не считается подтверждением аппаратуры.

Программа и живое встраивание

Firefox 141.0 и Playwright WebKit 26.0: карточки, PDF и iframe-контракт на 1440/390/320 px. На 390 px отдельно загружены опубликованные реальные сцены внутри школьного iframe. В этой композиции школьные файлы текущего checkout обслуживаются под её production origin; страницы сцен не подменяются.

Проверки, которые можно повторить

Шаги, ожидания, методы, результаты и статус 26 проверок
ПроверкаЧто сделатьЧто должно получитьсяКак проверили и что получилиСтатус
P01Программа Открыть карточку Design Lab
  1. Открыть каталог программ и найти Design Lab.
  2. Проверить декодирование постера и выбор этой программы.
В карточке есть декодируемый кадр 3D-комнаты. В выбранной программе показана панель модели и плана.

Chromium: карточки, image.decode(), видимость панели; 1440 / 390 / 320.

PASS на 1440/390/320 px: карточки, изображения и выбранная панель модели проверены браузером.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
P02Программа Выбрать программу и открыть план
  1. Выбрать Design Lab и открыть план.
  2. Перейти от заданий превью к неделям 4–6.
  3. Скачать PDF и проверить его текст и ссылку маршрута.
В плане шесть этапов, задания ведут к существующим неделям, PDF содержит программу и четыре учебных примера.

Chromium + разбор PDF; 1440 / 390 / 320.

PASS на 1440/390/320 px: шесть этапов, переходы к неделям 4–6 и содержимое PDF с четырьмя примерами сохранены.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
P03Программа Переключить Комната → Храм → Комната
  1. В выбранной программе открыть вкладку «Храм».
  2. Вернуться к «Комнате».
  3. Проверить постеры и запуск выбранного превью.
При выборе меняется постер; выбор вкладки сам по себе не загружает WebGL. iframe появляется после запуска.

Chromium; состояние панели и адрес iframe; дочерний документ заменён fixture.

PASS: переключения меняют постер; выбор вкладки не запускает WebGL. После клика создаётся iframe нужной сцены.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
P04Программа Запустить 3D и сменить программу
  1. Запустить модель и проверить количество iframe.
  2. Остановить, повторно запустить, сменить модель.
  3. Выбрать другую учебную программу.
Одновременно существует не больше одного iframe; остановка и смена программы удаляют предыдущий.

Chromium; контроль DOM iframe с тестовым дочерним документом.

PASS: запуск и повтор создают один iframe; остановка, смена сцены и программы удаляют его.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
P05Программа Увести превью за экран и вернуть его
  1. Запустить превью с тестовым дочерним документом.
  2. Прокрутить панель за экран.
  3. Вернуть панель в видимую область.
Дочерний документ получает active:false вне экрана и active:true при возвращении.

Chromium + контракт postMessage. Фоновая вкладка проверяется отдельно в T06.

PASS: школьный iframe-fixture получает active=false вне экрана и active=true после возврата. Часы реальных сцен проверены отдельно.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
P06Программа Ошибка загрузки модели / постороннее сообщение
  1. Послать preview-ready с чужим origin и неверным source.
  2. Послать допустимый preview-ready, затем preview-error.
  3. Проверить восстановленный постер и повторный запуск.
Чужие сообщения не открывают сцену; ошибка возвращает постер и кнопку повтора, повтор создаёт один iframe.

Chromium; управляемые сообщения из тестового iframe.

PASS: сообщения с чужими origin/source игнорируются; ошибка от выбранного iframe возвращает постер и кнопку повторного запуска.

Школьный Chromium · 3 размера · PASS ↗
Подтверждено
R01Комната 8 сочетаний ламп × яркость 0/25/50/75/100 × день/ночь
  1. Для дня и ночи перебрать все 8 сочетаний трёх ламп.
  2. Для каждого сочетания установить 0 / 25 / 50 / 75 / 100%.
  3. Сравнить источники света, материалы ламп и SVG-схему.
В 80 состояниях интенсивность, эмиссия материалов и отметки включения на схеме согласованы.

verify-lighting.mjs: реальные объекты Three.js + SVG; GPU подменён.

80 сочетаний пройдены. Проверка мощности покрывает отдельные пресеты в контроллере, а не все 80 строк.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
R02Комната Проверить пресеты и возврат к вечернему свету
  1. Сохранить параметры ламп вечернего сценария.
  2. Переключить утро → кино → никого дома → вечер.
  3. Отдельно сравнить WebGL-кадры вечернего и выключенного света.
Состояние ламп вечера полностью восстанавливается; вечерний и выключенный режимы дают непустые кадры.

Three.js: сравнение материалов и интенсивностей; WebGL: кадры evening/away.

Возврат параметров подтверждён контрактом. WebGL подтвердил видимые изменения света; пиксельное совпадение повторного вечера не заявляется.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
R03Комната Яркость 100% → 0% при включённых переключателях
  1. Во включённом вечернем сценарии сменить 100% на 0%.
  2. Поочерёдно проверить каждую лампу на 0 / 25 / 50 / 75 / 100%.
  3. При всех выключенных лампах изменить яркость 0 → 100%.
При 0% нет эмиссии ламп; изменение ползунка не создаёт свет при выключенных лампах. Экспозиция при диммировании постоянна.

Three.js: интенсивность и материалы. WebGL: 0/100%, разность кадров и средняя яркость.

Контракт и пиксельные сравнения пройдены. Небольшая фоновая подсветка намеренно сохраняет читаемый силуэт комнаты.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
R04Комната Включать подвес и торшер по отдельности
  1. Включать подвес, торшер и акцент по одному.
  2. Проверить направление, параметры теней и пересечение луча с геометрией.
  3. Сравнить кадр каждой лампы с полностью выключенным состоянием.
У каждой лампы есть направление и ограниченные тени; источник не заперт внутри собственного плафона; отдельная лампа осветляет кадр.

Three.js: raycasting и параметры теней. SwiftShader: рост яркости для каждой лампы.

Три источника прошли проверки геометрии и WebGL. Отсутствие всех визуальных артефактов теней этим не доказано.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
R05Комната Схема ↔ 3D, ракурс, изменение размера
  1. Выбрать верхний ракурс до завершения загрузки.
  2. Переключить схему и 3D после изменения настроек.
  3. Проверить план и объёмный ракурс на 1200 / 390 / 320.
Отложенный выбор ракурса сохраняется; схема использует текущее состояние; геометрия комнаты помещается в оба ракурса. Кадры плана и модели различаются.

Контроллер с моделью DOM; Three.js проекция границ; WebGL-кадры двух камер.

Контракт состояния и границ пройден; WebGL подтвердил различные камеры и размещение органов управления.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
R06Комната Ошибка рендера / потеря WebGL → повторный запуск
  1. Внести ошибку первого и последующего рендера.
  2. Смоделировать потерю контекста и ошибку при перетаскивании.
  3. Изменить параметры в 2D и повторить запуск.
Возвращается управляемая схема; повтор создаёт новый renderer и применяет актуальные параметры.

verify-camera.mjs: модель DOM и renderer с внедрёнными ошибками.

Сценарии восстановления пройдены. Настоящая потеря аппаратного GPU-контекста не воспроизводилась.

CI комнаты ↗ Сохранённый JSON комнаты ↗
Подтверждено
T01Храм Запустить полное качество с bloom
  1. Собрать сцену в полном качестве.
  2. Проверить тип каждого sampler2D при проходах.
  3. Запустить high в SwiftShader и потребовать postprocessing:true.
В sampler2D передаются Texture, нет чтения собственного draw buffer. Полный bloom запускается без ошибок консоли и активных шейдеров.

Three.js: контракт проходов. Chromium WebGL: настоящий high/bloom.

Типы и буферы проверены; реальный программный WebGL выполнил high-пайплайн без зарегистрированных ошибок.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T02Храм Накопить несколько уровней свечения
  1. Проследить четыре уровня размытия.
  2. При additive upsample проверить отсутствие автоматической и явной очистки.
Дополнительный уровень свечения складывается с содержимым назначения, а не стирает его.

verify-scene.mjs: наблюдение вызовов renderer и реальных материалов Three.js.

Контракт сохранения буфера пройден. Попиксельная форма каждого уровня bloom отдельно не сравнивалась.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T03Храм Сравнить экспозицию low/high и безопасные пределы
  1. Проверить API на 60 / 100 / 140%, выход за пределы и NaN/Infinity.
  2. В WebGL low сравнить 60% и 140%.
  3. Повторить 60% и 140% в high с включённым bloom.
Экспозиция конечна и ограничена 0.6–1.4. При 140% средняя яркость выше, чем при 60%, в обоих режимах; кадры не пустые.

Three.js: значения экспозиции. SwiftShader: средняя яркость и разность PNG.

Оба режима прошли сравнение 60/140%; API проверен также на 100%. Точное совпадение цветов low/high не требуется.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T04Храм Проверить световые переходы в GLSL
  1. Осмотреть шейдеры частиц, дождя, теневого тона и виньетки.
  2. Проверить возрастающий порядок числовых границ smoothstep.
  3. Запустить активные low/high-шейдеры в WebGL.
В проверенных GLSL нет smoothstep с обратными числовыми границами; активные шейдеры сцен не сообщают об ошибке.

Проверка строк реальных ShaderMaterial + запуск WebGL low/high.

Контракт GLSL пройден; low/high рендер без ошибок. Дождь в WebGL-превью выключен — его видимая анимация отдельно не проверялась.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T05Храм Пауза → изменить свет и ракурс → продолжить
  1. Остановить время сцены.
  2. Изменить экспозицию и ракурс; запросить новые кадры.
  3. Возобновить движение.
Рендер по запросу работает, фаза освещения при паузе не изменяется, возобновление не включает время простоя.

Three.js: снимки интенсивностей и uT; модель контроллера проверяет вызовы setPaused.

Фаза и пауза проверены по состоянию сцены; анимация после следующего интервала возобновляется.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T06Храм Скрыть вкладку → вернуться
  1. Накопить нормальные интервалы кадров.
  2. Сбросить таймер при смене видимости вкладки.
  3. Вернуться после большого перерыва; проверить также bfcache-восстановление.
Время простоя не двигает свет и не считается медленным кадром для адаптивного разрешения.

verify-scene.mjs: часы и pixel ratio; verify-startup.mjs: visibilitychange/pageshow.

Регрессия времени и подключение событий пройдены с моделируемыми часами и DOM.

CI храма ↗ Сохранённый JSON храма ↗
Подтверждено
T07Храм Страница храма: кадр модели → настоящее 3D → восстановление после сбоя
  1. Открыть основную страницу на 1200/390/320 px: проверить растровый кадр модели, управление без перекрытий, свет, кадрирование и сброс до запуска WebGL.
  2. Запустить настоящее 3D; сравнить яркость 60/140% и изменение камеры по PNG; вернуться к постеру и проверить сохранение состояния.
  3. Задержать импорт модуля, изменить настройки и отменить запуск; дождаться позднего модуля и убедиться, что отменённая сцена не появилась; запустить заново.
  4. Прервать первый сетевой импорт; после восстановления сети повторить настоящий импорт с новым URL и проверить сохранённые параметры.
  5. В Chromium задержать асинхронный импорт более 12 секунд, дождаться позднего результата и повторно запустить настоящее 3D; отдельно в модели DOM проверить сбои кадров/контекста и сохранение уже готового первого кадра после 26 секунд синхронной инициализации.
До WebGL виден растровый кадр настоящей модели. На 1200/390/320 px сцена читаема, управление расположено под ней. Свет и ракурс меняют настоящий 3D-кадр. Отмена, сбой сети и тайм-аут возвращают управляемый постер; поздний импорт не запускает отменённую сцену, повтор сохраняет настройки.

verify-startup.mjs: модель DOM и ошибки renderer, включая сохранение успешного первого кадра после 26 секунд синхронной инициализации. verify-fullpage.mjs: настоящая dist/index.html, растровый постер, декодирование, геометрия элементов и PNG-разности в Chromium/SwiftShader, Firefox и Playwright WebKit на Linux/Mesa. Полная страница: 1200×900, 390×900, 320×900. Отмена и сбой сети — на 390 px во всех трёх движках; истечение реальных 12 секунд ожидания асинхронного модуля — только Chromium.

PASS на точном commit d8cd29e4cde05a306dd1791c78abad9124c2311d: Chromium 140.0.7339.16 — 55 full-page проверок; Firefox 141.0 и Playwright WebKit 26.0 — по 51. Все три отчёта без ошибок. На 1200/390/320 px подтверждены растровый кадр модели до WebGL, размещение управления, настоящий 3D-свет и камера. Во всех движках пройдены отмена с поздним импортом и повтор после сетевого сбоя; в Chromium дополнительно пройден реальный 12-секундный тайм-аут асинхронного импорта и повтор. Контроллер отдельно сохраняет успешный первый кадр после 26 секунд синхронной инициализации. Физический аппаратный сбой WebGL не воспроизводился.

Chromium · основная страница + контракты · PASS ↗ Firefox/WebKit · основная страница · PASS ↗ Full-page сценарий · точный d8cd29e ↗ chromium · 55 PASS · JSON ↗ firefox · 51 PASS · JSON ↗ webkit · 51 PASS · JSON ↗
Подтверждено
V01Обе сцены Настоящий рендер 3D на 1200/390/320 px
  1. Открыть preview.html каждой сцены на 1200×800, 390×520, 320×520.
  2. Потребовать настоящий WebGL-контекст и сделать PNG canvas.
  3. Проверить непустой кадр, отсутствие overflow, ползунок и сообщения видимости.
Кадр не пустой и не почти целиком чёрный/белый; органы управления помещаются; доверенные сообщения управляют видимостью, чужой origin не возобновляет сцену.

Chromium / ANGLE SwiftShader. PNG: яркость, дисперсия и диапазон; DOM и postMessage.

Обе сцены прошли три ширины. Это адаптивные viewport-проверки на программном WebGL, а не испытание трёх устройств.

CI комнаты ↗ CI храма ↗ Сохранённый JSON комнаты ↗ Сохранённый JSON храма ↗
Подтверждено
D01Физический телефон Xiaomi: Chrome и встроенный браузер
  1. Открыть модель на физическом Xiaomi в Chrome.
  2. Повторить во встроенном браузере.
  3. Оценить свет, плавность, нагрев и возврат из фона.
Проверить плавность, тени, нагрев, потерю контекста и возврат из фонового режима.

Ручная проверка на устройстве

Не выполнялось в этой итерации. Нет доступа к измерениям на физическом телефоне.

Не запускали
D02Другие браузеры Safari/iOS и аппаратные GPU
  1. Повторить ключевые сценарии на Safari/iOS.
  2. Проверить аппаратные GPU и драйверы целевых устройств.
  3. Сравнить тени, цвет и производительность.
Проверить работу на Safari/iOS и видеодрайверах реальных устройств.

Отдельный прогон на физических устройствах

Пока не выполнялось. Linux WebKit и Firefox проверяются отдельно и не заменяют испытание Safari/iOS и аппаратных GPU.

Не запускали
B01Firefox Firefox: настоящий рендер комнаты и храма
  1. Запустить комнату и храм, включая полное свечение храма.
  2. Сравнить яркость и ракурсы, включить лампы по отдельности.
  3. Повторить мобильный размер и паузу/возобновление.
Непустая 3D-модель, изменение света и камер, читаемое управление на 1200/390/320 px.

Playwright Firefox, Ubuntu, Xvfb и программная графика Mesa; реальная геометрия и шейдеры.

PASS: комната 28 и храм 20 проверок; реальные WebGL-кадры и свет на 1200/390/320 px. Версия движка: Firefox 141.0.

Комната · firefox · PASS ↗ Храм · firefox · PASS ↗
Подтверждено
B02WebKit WebKit: настоящий рендер комнаты и храма
  1. Запустить комнату и храм, включая полное свечение храма.
  2. Сравнить яркость и ракурсы, включить лампы по отдельности.
  3. Повторить мобильный размер и паузу/возобновление.
Непустая 3D-модель, изменение света и камер, читаемое управление на 1200/390/320 px.

Playwright WebKit, Ubuntu, Xvfb и программная графика Mesa; реальная геометрия и шейдеры.

PASS: комната 28 и храм 20 проверок; реальные WebGL-кадры и свет на 1200/390/320 px. Версия движка: WebKit 26.0 на Linux; это не Safari/iOS.

Комната · webkit · PASS ↗ Храм · webkit · PASS ↗
Подтверждено
B03Firefox Firefox: превью внутри программы и учебный план
  1. Выбрать Design Lab и проверить кадры моделей.
  2. Проверить переключение сцены, паузу вне экрана и повторный запуск после ошибки.
  3. Проверить недели 4–6, PDF и фильтры матрицы.
Карточка и план читаются, 3D запускается и останавливается, ошибки сохраняют постер; переходы ведут к реальным неделям обучения.

Playwright Firefox, Ubuntu; 1440/390/320 px; контракт родительского iframe и отдельное реальное встраивание.

PASS: 246 проверок карточек, плана, PDF и iframe на 1440/390/320 px. Отдельно обе опубликованные модели запущены внутри программы на 390 px: реальный WebGL, свет, пауза/возобновление и остановка.

firefox · программа + настоящее 3D · PASS ↗
Подтверждено
B04WebKit WebKit: превью внутри программы и учебный план
  1. Выбрать Design Lab и проверить кадры моделей.
  2. Проверить переключение сцены, паузу вне экрана и повторный запуск после ошибки.
  3. Проверить недели 4–6, PDF и фильтры матрицы.
Карточка и план читаются, 3D запускается и останавливается, ошибки сохраняют постер; переходы ведут к реальным неделям обучения.

Playwright WebKit, Ubuntu; 1440/390/320 px; контракт родительского iframe и отдельное реальное встраивание.

PASS: 246 проверок карточек, плана, PDF и iframe на 1440/390/320 px. Отдельно обе опубликованные модели запущены внутри программы на 390 px: реальный WebGL, свет, пауза/возобновление и остановка.

webkit · программа + настоящее 3D · PASS ↗
Подтверждено

Что эти результаты не подтверждают

Прогоны и исходные данные

Отчёты JSON сохранены в репозитории; кадры доступны в CI и карточках программы. Результаты относятся к указанным версиям кода; последующие изменения требуют нового прогона.

safal207/test-it-python ↗Подтверждено

Commit: dffe8418fb050b16b663a618974e988bd18446ba

Артефакт: ai-path-responsive-previews: скриншоты и PDF

Матрица в JSON ↗ · Техническая версия ↗