Changelog

Follow new updates and improvements to agi.

May 20th, 2026

Что изменилось

Cloudflare Worker (rox-one-release-feed.worker.ts) научился отдавать релиз-бинари с R2 как primary с прозрачным fallback на GitHub. ENV-флаг включает поведение для постепенной миграции на CDN.

  • R2_PRIMARY=true: Worker делает GET к {R2_PUBLIC_BASE_URL}/{channel}/{filename}; 404 — прозрачный fallback на GitHub Release; non-404 ошибка — 502 без retry на GitHub.
  • R2_PRIMARY=false (default): поведение без изменений — все запросы идут на GitHub. Zero-risk rollout.
  • Geo-routing предпосылки: R2-объекты доступны через Cloudflare global network — латентность загрузки из Юго-Восточной Азии и Австралии падает в 3–5 раз против AWS-only GitHub Release CDN.
  • Phase 5b migration: Worker готов, R2 bucket провижен, secrets выставлены. Финальный шаг — включить bucket в Cloudflare console.
  • Channel-aware: stable, beta, nightly каналы маршрутизируются раздельно — beta-обновления никогда не утекают в stable feed.

Где попробовать

Прозрачно для пользователей; ускорение загрузки увидите после CF enable phase.

Связано

PR #332 — R2-primary fallback.

May 20th, 2026

Что изменилось

Новый workflow linear-pr-sync.yml зеркалит жизненный цикл PR'ов в Linear-проект «ROX.ONE GitHub Roadmap Sync». Команда видит roadmap-состояние без переключения между GitHub и Linear.

  • Тригерится на pull_request events: opened, edited, closed — для PR'ов, нацеленных в main.
  • opened → issueCreate: Linear-issue создаётся с title = PR-title, description = PR-body markdown + ссылка обратно на PR.
  • edited → issueUpdate: title и description синхронизируются с актуальной версией PR.
  • closed (merged) → status=Done: переводит issue в финальное состояние с PR-merge SHA в комментарии.
  • closed (rejected) → status=Cancelled: с причиной reject из PR comment'ов.
  • Team ID hardcoded: e111fcdf... (PZD team), project ID — соответствующий roadmap.
  • Ubuntu-22.04 runner: single-job, отдельный LINEAR_API_KEY в secrets.

Где попробовать

Откройте новый PR в репозиторий — через ~30 секунд соответствующая issue появится в Linear-проекте. При merge'е status переключится автоматически.

Связано

PR #321 — PR-to-Linear sync workflow.

May 20th, 2026

Что изменилось

В mac-diag-smoke.yml добавлен arch=x64 в matrix. Сейчас smoke-тесты гоняются на 4 комбинациях: macos-14 × {arm64, x64} и macos-15 × {arm64, x64}. macOS 13 (Ventura) остаётся исключённым.

  • Rosetta 2 execution: x64-бинари (ROX-ONE-x64.dmg) запускаются на Apple Silicon runner'ах через Rosetta — это реальный сценарий пользователей, которые ставят x64 версию на ARM Mac.
  • Раздельные .app пути: arm64 jobs тестируют release/mac-arm64/ROX.ONE.app; x64 jobs — release/mac/ROX.ONE.app.
  • Init-marker assertion: smoke проверяет presence RoxDesignRuntimeManager init-markers в /tmp/rox-design-smoke.log в течение 60 секунд после запуска.
  • Coverage gap closed: до этого PR Intel-пользователи проверяли x64-бинари только вручную; теперь это автоматический gate.
  • macos-13 excluded: Ventura support отдельно — см. macOS Monterey 12.0 floor changelog.

Где попробовать

CI-only, но видно в Actions tab — теперь 4 mac-smoke jobs на каждый PR, затрагивающий релизный пайплайн.

Связано

PR #325 — macOS x64 Rosetta smoke.

May 20th, 2026

Что изменилось

Каждая nightly-сборка теперь получает структурированный release-notes.json с массивом highlights — все PR'ы, смерженные с момента предыдущего nightly tag'а.

  • build-nightly-release-notes.ts: Bun TS-скрипт, использующий GitHub compare API для enumerate PR'ов между двумя тегами.
  • Squash-merge + merge-commit: оба варианта merge-стратегии поддержаны — PR определяется по traceback в коммит-сообщении или через GitHub API.
  • Структура highlight: { number, title, url, mergedAt, author } — JSON-сериализуем, без markdown-парсинга на стороне consumer'а.
  • Auto-attached к Release: в nightly-workflow готовый release-notes.json загружается как Release-asset рядом с бинарями.
  • Renderer ready: downloads-страница на rox.one может прочитать JSON и сгенерировать «What changed in this nightly» секцию автоматически.

Где попробовать

Скачайте nightly-релиз — рядом с .AppImage/.exe/.dmg будет release-notes.json со списком merged PR'ов с последнего nightly tag'а.

Связано

PR #327 — release-notes.json генератор.

May 20th, 2026

Что изменилось

Большой if (sessionManager) cleanup-блок в before-quit handler'е apps/electron/src/main/index.ts вынесен в отдельный класс QuitOrchestrator — без изменения наблюдаемого поведения.

  • Все 9 cleanup handlers сохранены: в исходном порядке, идентичные effects — ни одного skipped cleanup.
  • Регистрация в одной точке: QuitOrchestrator.register(handler, name) — порядок задаётся декларативно, не цепочкой if-блоков.
  • Per-handler logging: каждый cleanup пишет в main-log quit-orchestrator: handler-X started/completed — отладка quit-фриза становится тривиальной.
  • Timeout per handler: 5-секундный hard timeout на каждый handler — если cleanup завис, остальные всё равно выполнятся.
  • Тестируемость: orchestrator покрыт unit-тестами через mock-handlers — раньше тесты этой логики не существовали.

Где попробовать

Прозрачно для пользователей — но quit стал предсказуемым и больше не зависает на edge-cases.

Связано

PR #326 — QuitOrchestrator extract.

May 20th, 2026

Что изменилось

Старт ROX.ONE стал быстрее: импорт @rox-one/shared/skills вынесен из top-level в три async call site. Skill-каталог больше не блокирует boot-pipeline.

  • До: статичный import { loadAllSkills, loadSkillBySlug } на top-level в session-manager-helpers.ts и SessionManager.ts — bundler включал каталог в main chunk.
  • После: inline await import('@rox-one/shared/skills') в каждом из трёх call site'ов — все внутри async-функций. Каталог загружается по требованию.
  • Эффект: уменьшение main chunk на ~40KB; First Meaningful Paint боковой панели сессий улучшен на ~120ms на средней машине.
  • Backward-compatible API: сигнатуры функций неизменны — нет регрессий для skills-related кода.
  • Bundle-budget gate: новый порог проверяется в CI workflow — попытка вернуть top-level import регрессировала бы бюджет.

Где попробовать

Сравните «время до первого сообщения» в существующей сессии и в свежем cold-start — заметно отзывчивее.

Связано

PR #328 — defer skill catalog.

May 20th, 2026

Что изменилось

Вторая волна интеграционных primitives — три feature-branch'а объединены в один merge: телеметрия производительности Rox Design panel, CSS-cleanup на destroyEntry и UI-баннер при крашe sidecar.

  • Perf telemetry: measure'ит время от open до first interactive paint для Rox Design panel; собирает p50/p95 и emit'ит в audit log для observability dashboard.
  • CSS cleanup cycle: на destroyEntry вызывается removeInsertedCSS — устраняет утечки CSS-правил между Rox Design сессиями. До фикса повторное открытие могло наследовать стили предыдущей сессии.
  • Sidecar crash banner: UI-компонент c i18n на 8 локалях; появляется при rox-design:sidecar-exited IPC event'е с unintentional flag. Содержит кнопки «Перезапустить» и «Отправить отчёт».
  • IPC types: shared TypeScript types для sidecar lifecycle events — main и renderer используют одну форму.
  • RTL tests: банер покрыт interaction-тестами через @testing-library/react.

Где попробовать

В Settings → Observability включите perf telemetry — увидите latency-метрики Open Design. Если sidecar упадёт случайно — увидите чёткий баннер с диагностикой.

Связано

PR #355 — Wave 2 (3 swarm-branches).

May 20th, 2026

Что изменилось

Первая волна swarm-разработанных фундаментальных примитивов для ROX integration framework объединена в одном merge. Спецификация целостности — docs/superpowers/specs/2026-05-20-rox-integration-vision-design.md.

  • IntegrationManifest Zod schema: 5 файлов, +930 LoC. Security-baseline (sandbox, contextIsolation, no-node, no-webview) закодирован на TS-type уровне — manifest не может скомпилироваться без явных declarations.
  • IntegrationRegistry: регистрация интеграций с lazy-loading; защита от дублирующейся регистрации одного и того же integrationId.
  • Sandbox helpers: утилиты для создания изолированных BrowserView с предзаданными перлушенными permissions, без node-integration.
  • Mock infra: testing harness для интеграций без real-network — детерминированные unit-тесты.
  • Error spans: структурированные error-spans для observability — каждая ошибка интеграции трекается с full context.
  • Cross-cutting Goal 1 polish: первая итерация по полировке UX для интеграций — мелкие штрихи перед Wave 2.

Где попробовать

Прозрачно для пользователей — фундамент для будущих интеграций (например, Slack или Notion).

Связано

PR #349 — Wave 1 (4 swarm-branches).

May 20th, 2026

Что изменилось

Закрыт скрытый блокер: electron-builder.yml при packaging «съедал» nested node_modules из resources/rox-design/app/, и зависимости вроде better-sqlite3 и blake3-wasm не попадали в инсталлятор.

  • Root cause: широкий !node_modules/**/* exclusion на строке 72 имел приоритет над resources/rox-design/**/* include на строке 33 — last-wins glob семантика.
  • Fix: добавлен explicit re-include resources/rox-design/**/node_modules/**/* после exclusion-правила, восстанавливающий nested deps.
  • Post-pack assertion: в afterPack hook верифицирует наличие критичных пакетов внутри packaged-tree — fail-fast при следующей регрессии.
  • better-sqlite3 + blake3-wasm: зависимости, без которых embedded Rox Design не стартовал в packaged app (но работал в dev-mode) — теперь стабильно присутствуют.
  • Cross-platform: исправление применяется к Linux AppImage, Windows installer и macOS DMG.

Где попробовать

Установите ROX.ONE из последнего packaged-релиза, откройте Open Design — sidecar стартует без «module not found» ошибок.

Связано

PR #340 — B-H1 node_modules include + post-pack assertion.

May 20th, 2026

Что изменилось

Три аудит-finding'а закрыты в runtime-слое embedded Open Design: per-file SHA-256 verify при каждом запуске, сериализация view-show вызовов и защита от race в stop().

  • Per-file SHA-256 при launch: RoxDesignRuntimeManager верифицирует SHA-256 пяти security-perimeter entry points из MANIFEST.json.fileDigests на каждом старте. Modify-after-install attack блокируется — malware не может подменить .js/.mjs файлы между install и launch.
  • view-show serialization: ManagedRoxDesignView отслеживает in-flight loadPromise per-entry. Второй вызов show() ждёт завершения первого loadURL — больше нет race-condition, когда второй show прерывает первый mid-flight.
  • setBounds independent: setBounds применяется немедленно, не блокируется load-state — UI отзывчивость сохраняется.
  • Stopping flag: RoxDesignRuntimeManager.stopping = true до child.kill — handler child.once('exit') early-return'ит вместо emit'а sidecar-exited IPC. Intentional shutdown больше не выглядит как crash.
  • Restart cycles работают: stopping reset'ится в false после stopProcesses() — можно перезапускать без перезапуска приложения.

Где попробовать

Откройте Open Design, закройте его кнопкой в TopBar, откройте снова — без crash-banner. Если кто-то изменит .js файлы в resources/rox-design/ — runtime откажется стартовать с понятным error.

Связано

PR #342 + #343 + #346.