Skip to content

Подготовить sensor к агентам и поправить фолбэки гироскопа - #1

Merged
alexstep merged 1 commit into
mainfrom
cursor/agent-ready-4e2a
Oct 7, 2026
Merged

alexstep merged 1 commit into
mainfrom
cursor/agent-ready-4e2a

Conversation

@alexstep

@alexstep alexstep commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Что сделано

Репозиторий подготовлен к работе облачных агентов. Версия не менялась (0.0.0, "private": true), в npm ничего не публиковалось, в main пуша не было.

  • AGENTS.md: что делает GyroShine, структура, локальное демо, тесты и правила (без runtime-зависимостей, один маленький sensors.js, публичный API не ломать).
  • .cursor/environment.json: npm ci и Chromium для Playwright, на старте статический демо-сервер на порту 4173.
  • Совместимость GyroShine:
    • DeviceOrientationEvent.requestPermission() вызывается синхронно из start(), до любого await, и только из user gesture. Без жеста запрос не делается, приходит событие permissionneeded.
    • Ответ "prompt" (так отвечает текущий Chromium, если выбор не сделан) не считается отказом.
    • Вне secure context (не HTTPS и не localhost) датчики движения не подключаются.
    • prefers-reduced-motion: reduce оставляет нейтральные 50.00 / 50.00 и не вешает слушатели (respectReducedMotion: true по умолчанию).
    • Фолбэк — pointermove для мыши и пера, touch игнорируется.
    • stop() снимает deviceorientation, pointermove, слушатель RelativeOrientationSensor, интервал батареи и подписку Telegram. Повторный start() не копит слушатели. Зависший Sensor API обрывается по таймауту.
  • Демо: на телефонах с requestPermission чекбокс сенсоров выключен, пока его не нажмут. На десктопе (pointer: fine) он остаётся включённым, блики сразу следуют за мышью. Поправлен for у подписи «CSS блики».
  • Тесты: юнит-тесты углов и CSS-процентов (node:test) и e2e Playwright с синтетическим deviceorientation.
  • CI: install, lint, unit, e2e. На push в main статика демо публикуется на GitHub Pages.

Публичный контракт прежний: GyroShine, start / stop / on / off, событие change со строками gammaPercent и betaPercent. Добавлены опция respectReducedMotion и событие permissionneeded. В README исправлены имя опции minBattery (в коде никогда не было minBatteryLevel) и пример подключения: файл — ES-модуль, не классический script.

Что проверено

  • npm test: 20 тестов, расчёт углов, CSS-строки, снятие слушателей, iOS без жеста, insecure context, reduced motion, низкий заряд, ошибка Sensor API.
  • npm run lint.
  • npm run test:e2e: 4 сценария в Chromium (наклон → --gyro-gamma-percent: 100.00, мышь → 60.00, stop() больше не двигает переменные, reduced motion остаётся на 50.00). Кнопка «Рандомная тема» меняет data-theme.
  • bash .cursor/install.sh дважды подряд, оба раза завершились успешно.
  • Демо-сервер отдаёт index.html с кодом 200.

Ручной шаг для Pages: в настройках репозитория источник должен быть GitHub Actions. Пока выбран деплой из ветки, job pages после мержа в main упадёт, а текущий сайт https://alexstep.github.io/sensor/ продолжит собираться по-старому.

alexstep/alexstep

Это не дубль. У alexstep/alexstep описание пустое, в репозитории только профиль автора, и он ссылается сюда. Описание «Gyroscope css effects» стоит у alexstep/sensor.

Бэклог

  1. Перевести other/ex0.html и other/ex1.html на GyroShine: сейчас там свой слушатель deviceorientation без stop(), без reduced motion и без фолбэка.
  2. Не держать deviceorientation и указатель одновременно: включать мышь, только если события ориентации молчат.
  3. Добавить JSDoc или .d.ts для публичного API без runtime-зависимости и без сборки.
  4. После переключения Pages на Actions проверить живой деплой демо.
  5. Визуальная проверка тем демо (скриншоты light/dark), не только CSS-переменных.
Open in Web Open in Cursor 

Keep GyroShine a single small file, but request motion permission from a user gesture, skip sensors off HTTPS and under reduced motion, fall back to a pointer, and remove listeners on stop. Add unit and Playwright tests, CI, a GitHub Pages demo workflow, and Cloud Agent setup.

Co-authored-by: kellas <alex.step.kellas@gmail.com>
@alexstep
alexstep marked this pull request as ready for review October 7, 2026 21:07
@alexstep
alexstep merged commit 3149d19 into main Oct 7, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants