Текущее состояние
Рабочий профиль, переносимый формат Р‑схем 1.0, предметный backend и ортогональный визуальный редактор реализованы. Сервер валидирует, хранит и экспортирует проекты и защищает конкурентную запись ревизиями. Редактор хранит несохранённый черновик локально, а новую revision создаёт только по явной команде пользователя. Геометрия редактора отделена от смысла алгоритма.
| Компонент | Состояние |
|---|---|
| Репозиторий и CI | Готово |
Профиль и контракт Р‑схем 1.0 | Готово |
| Предметный backend и API | Готово |
| Линейный визуальный редактор | Готово |
| Ортогональный рендерер и layout-инструменты | Готово |
| Упорядоченные альтернативы и циклы | Готово |
| Production deployment | Автоматический пилот после зелёного CI |
В шапке редактора отображается build <7 символов SHA>. Полный SHA активного release возвращает публичный /health; deploy откатывается, если health показывает не тот commit.
Контракт 1.0
R_SCHEMA_PROFILE.md— семантика исполнения и уровни готовности;DATA_CONTRACT.md— объекты, ссылки и межобъектные инварианты;schema/r-schema-project-1.0.schema.json— строгая JSON Schema;fixtures/r-schema-1.0— пять канонических проектов;API_STAGE_2.mdиbackend/openapi.yaml— поведение и точная поверхность API.
API 1.0
Предметные маршруты находятся под /api/v1/projects. Доступны создание проекта, чтение и список, валидация, ручное сохранение с If-Match, read-only view и переносимый JSON-export. API контрольных версий отсутствует.
Корректный по форме черновик разрешено сохранять с предметными ошибками. Недостижимый заявленный уровень готовности отклоняется. Документы прежнего сервиса не мигрируются и не принимаются новым API. Визуальный редактор уже поддерживает основной линейный сценарий; расширенные конструкции будут добавляться последовательно по плану разработки.
Сохранение и восстановление черновика
- Любое содержательное или геометрическое изменение сразу записывается в
localStorageтекущего браузера и получает статус «Не сохранено». - Фоновая отправка проекта отсутствует. PUT и новая server revision выполняются только кнопкой «Сохранить» или
Ctrl+S. - Успешное ручное сохранение очищает локальный черновик. Повторное сохранение без изменений является no-op и не увеличивает revision.
- После перезагрузки страницы или повторного входа редактор сравнивает локальный черновик с серверным проектом и предлагает восстановить, скачать или отбросить его.
- Если серверная revision успела измениться, диалог предупреждает о риске замены более свежего серверного варианта; исходный черновик остаётся доступен для скачивания.
- Масштаб и положение холста хранятся отдельно только в браузере, не создают историю undo и не меняют server revision.
- JSON-, Markdown- и SVG-экспорт используют открытый локальный черновик и не выполняют скрытого сохранения.
Работа с геометрией
- На холсте любое состояние показано небольшой круглой вершиной. Название, тип и описание остаются в панели свойств и не утяжеляют схему.
- Функциональная дуга всегда является одним прямым горизонтальным отрезком. Переход между уровнями выполняют отдельные вертикальные соединители без стрелок.
- Повторная дуга между той же парой вершин автоматически занимает новый параллельный уровень. Редактор удлиняет две вертикальные стойки и пристыковывает к ним горизонталь без создания двух ложных вершин.
- Геометрический стык не является вершиной. Чтобы сделать его частью алгоритма, перетащите существующую вершину на стык и подтвердите «вливание»; затронутая дуга будет расщеплена в семантическом графе.
- Перетаскивание состояния меняет только его координаты и автоматически закрепляет его от последующей автораскладки.
- В основной панели оставлены добавление вершины, удаление, выравнивание и масштаб. Специальные вершины, циклы, настройки вида и экспорт находятся в меню «Ещё».
- «Закрепить вершину» вручную включает или снимает фиксацию; «Выровнять схему» перемещает только незакреплённые состояния.
- «Привязка к сетке» управляет шагом сетки и направляющими выравнивания, «Сетка» — только видимостью фона.
- У выбранной дуги есть только тип («Обычная», «Обратная», «Двойная»), условие и исполнение. Пустое условие или исполнение на схеме не показывается; двойная дуга рисуется двумя линиями без стрелки.
- «Экспорт SVG» формирует самостоятельное изображение без сетки и элементов управления. JSON-export остаётся переносимым источником смысла и layout.
- Команда «Сменить тему» переключает светлую и тёмную темы. Печатные стили сохраняют различимость вершин и возвратных линий в чёрно-белом виде.
Обычное перемещение и автораскладка меняют только layout. Подтверждённое вливание — отдельная семантическая операция: она включает вершину в путь алгоритма и попадает в undo как изменение логики.
Альтернативы и циклы
- Для построения дуги выберите исходную вершину и протяните появившуюся рядом иконку. При отпускании в пустом месте конечная вершина создаётся на горизонтали исходной. При отпускании на существующей вершине дуга занимает отдельный параллельный уровень: две вертикальные стойки соединяются горизонталью со стрелкой к цели.
- Повторное применение «Дуги» создаёт следующую условную ветку перед существующим fallback и автоматически поддерживает непрерывный
order. - В свойствах состояния исходящие ветки показаны в смысловом порядке. Условные ветки можно перетаскивать или двигать кнопками;
otherwiseи безусловный fallback всегда остаются последними. - Тип «Обратная» разворачивает направление горизонтальной стрелки и источник/цель семантического перехода.
- «Цикл» создаёт проверку, шаг, возврат и один видимый выход. «Повтор с лимитом» дополнительно создаёт счётчик попыток, успешный исход и исход исчерпания лимита.
- Перед удалением редактор показывает число зависимых переходов и действий. Для единственного выхода из цикла предупреждение содержит код будущей диагностики
CYCLE_WITHOUT_EXIT. - Метка рядом с undo показывает тип последнего изменения: «Логика» для условий, целей и
order; «Геометрия» для координат и маршрутов. Навигация по холсту в undo не попадает. - «Экспорт Markdown» формирует предварительное смысловое описание, где ветки всегда отсортированы по
order. Полный пакет для ИИ будет расширен на этапе 9.
Локальная проверка
cd backend
npm test
npm run test:e2e
Подробная последовательность работ хранится во внутреннем плане разработки.