May 20th, 2026

Open Design runtime: SHA-256 verify + view-show serialization + stop race

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

Три аудит-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.