> ## Documentation Index
> Fetch the complete documentation index at: https://product.mmbrn.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Edit & navigation

> Undo, dirty baseline, branch revert, breadcrumbs, runtime highlight, борд-лок под захватом.

# Edit & navigation

Поведение редактора сценария после PR #139/#140. Канон для разработчиков:
[`DEVICE_BOARD_CONCEPT.md`](https://github.com/officefish/Membrana/blob/main/packages/device-board/DEVICE_BOARD_CONCEPT.md) §21.

## Save и dirty

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

## Branch snapshot (F7)

Если вы **не сохранили** правки на текущем обработчике и переключаете вкладку сценария
(main, alarm, onConnect, …) или уходите на слой **Signal**, редактор **откатывает весь document**
к последнему сохранённому состоянию.

<Note>
  Это «мягкий сброс» на несколько шагов без многократного Undo. Несохранённые правки на handler-ветке
  при таком переходе **теряются**.
</Note>

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

| Ситуация                                       | Поведение                                         |
| ---------------------------------------------- | ------------------------------------------------- |
| Переключение **fn-1 → fn-2** в списке функций  | Черновик fn-1 остаётся в памяти                   |
| **Collapse → function**                        | Текущие правки handler-ветки сохраняются в drafts |
| **Создание новой функции** на вкладке function | Аналогично — `keep-dirty`                         |

## Undo (один шаг)

|                     |                                                       |
| ------------------- | ----------------------------------------------------- |
| **Горячие клавиши** | `Ctrl+Z` (Win/Linux) · `Cmd+Z` (macOS)                |
| **Кнопка**          | ↶ в левом нижнем углу канваса (после левого сайдбара) |
| **Глубина**         | **1 шаг** — только последнее mutating-действие        |

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

* Удаление узлов
* Удаление функции
* Добавление / удаление 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` — удобно для отладки агентами.

## Breadcrumbs

В шапке канваса отображается контекст:

* **Сценарий ›** `{имя ветки}` — на handler-ветках
* **Функция ›** `{имя}` — на вкладке function

## Runtime exec highlight

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

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

Пока устройство **захвачено** из кабинета, борд остаётся открытым принудительно:

* кнопка **«Выйти из доски»** задизейблена с подсказкой; попытка смены модуля
  откатывается обратно на device-board (все пути навигации);
* кнопка «Открыть журнал» на вкладке «Журнал» сайдбара также заблокирована;
* при захвате борд **открывается автоматически** с выбранным на сервере сценарием
  (если пользовательских сценариев нет — остаёмся на launcher);
* разблокировка происходит сама при release захвата по любой причине.

Блокируется **навигация, не звук**: emergency stop внутри борда доступен всегда.
Матрица кнопок управления — на странице [Editor overview](/device-board/editor/overview).

## GetDevice на графе

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

## См. также

* [User functions](/device-board/editor/user-functions) — редактор функций, pins, collapse
* [Editor overview](/device-board/editor/overview) — export, clear branch, inspector
