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.
device-board edit: capture|undo|clear — удобно для отладки агентами.
Breadcrumbs
В шапке канваса отображается контекст:- Сценарий ›
{имя ветки}— на handler-ветках - Функция ›
{имя}— на вкладке function
Runtime exec highlight
Во время Run активная exec-цепочка подсвечивается на канвасе (overlay поверх узлов). Канвас в runtime read-only; клик по узлу открывает инспектор портов.Борд-лок под захватом
Пока устройство захвачено из кабинета, борд остаётся открытым принудительно:- кнопка «Выйти из доски» задизейблена с подсказкой; попытка смены модуля откатывается обратно на device-board (все пути навигации);
- кнопка «Открыть журнал» на вкладке «Журнал» сайдбара также заблокирована;
- при захвате борд открывается автоматически с выбранным на сервере сценарием (если пользовательских сценариев нет — остаёмся на launcher);
- разблокировка происходит сама при release захвата по любой причине.
GetDevice на графе
Узел GetDevice (device-global) можно удалить с канваса — это экземпляр ссылки,
runtime по-прежнему резолвит устройство из контекста цикла. Event-узлы удалять нельзя (locked).
См. также
- User functions — редактор функций, pins, collapse
- Editor overview — export, clear branch, inspector