Skip to main content

Edit & navigation

Поведение редактора сценария после PR #139/#140. Канон для разработчиков: DEVICE_BOARD_CONCEPT.md §21.

Save и dirty

  • Сценарий не сохраняется автоматически при каждом изменении графа.
  • Кнопка Сохранить активна, пока черновик отличается от последнего сохранённого снимка (isDirty).
  • Persist (cabinet / localStorage) срабатывает только по явному Save.

Branch snapshot (F7)

Если вы не сохранили правки на текущем обработчике и переключаете вкладку сценария (main, alarm, onConnect, …) или уходите на слой Signal, редактор откатывает весь document к последнему сохранённому состоянию.
Это «мягкий сброс» на несколько шагов без многократного Undo. Несохранённые правки на handler-ветке при таком переходе теряются.

Когда откат не происходит

Undo (один шаг)

Что отменяется

  • Удаление узлов
  • Удаление функции
  • Добавление / удаление pin функции
  • Свёртка в функцию или comment group
  • Выравнивание / exec layout batch
  • Очистка ветки (clear branch)

Что не отменяется

  • Перетаскивание узла мышью (позиция) — осознанное ограничение v1
  • Полный redo stack (Ctrl+Y) — не реализован

Сброс Undo без восстановления

Pending undo сбрасывается (кнопка ↶ исчезает) при:
  • смене обработчика (main ↔ alarm, …);
  • смене активной функции;
  • входе / выходе из тела функции;
  • переходе Signal ↔ Scenario.
При включённой галочке INFO в shell в консоль пишутся строки вида device-board edit: capture|undo|clear — удобно для отладки агентами. В шапке канваса отображается контекст:
  • Сценарий › {имя ветки} — на handler-ветках
  • Функция › {имя} — на вкладке function

Runtime exec highlight

Во время Run активная exec-цепочка подсвечивается на канвасе (overlay поверх узлов). Канвас в runtime read-only; клик по узлу открывает инспектор портов.

Борд-лок под захватом

Пока устройство захвачено из кабинета, борд остаётся открытым принудительно:
  • кнопка «Выйти из доски» задизейблена с подсказкой; попытка смены модуля откатывается обратно на device-board (все пути навигации);
  • кнопка «Открыть журнал» на вкладке «Журнал» сайдбара также заблокирована;
  • при захвате борд открывается автоматически с выбранным на сервере сценарием (если пользовательских сценариев нет — остаёмся на launcher);
  • разблокировка происходит сама при release захвата по любой причине.
Блокируется навигация, не звук: emergency stop внутри борда доступен всегда. Матрица кнопок управления — на странице Editor overview.

GetDevice на графе

Узел GetDevice (device-global) можно удалить с канваса — это экземпляр ссылки, runtime по-прежнему резолвит устройство из контекста цикла. Event-узлы удалять нельзя (locked).

См. также