# Рабочий процесс OpenSpec
OpenPencil использует [OpenSpec](https://github.com/Fission-AI/OpenSpec) для разработки на основе спецификаций. Спецификации — это источник истины о том, что делает система.
## Структура
```
openspec/
├── specs/ # Источник истины: как система работает сейчас
│ ├── scene-graph/
│ │ └── spec.md
│ ├── canvas-rendering/
│ │ └── spec.md
│ ├── auto-layout/
│ │ └── spec.md
│ └── ... # Всего 19 спецификаций возможностей
├── changes/ # Предлагаемые изменения (один каталог на изменение)
│ └── archive/ # Завершённые изменения
└── config.yaml # Опциональная конфигурация
```
## Текущие спецификации
| Возможность | Описание |
|-------------|----------|
| scene-graph | Хранение в плоском Map, CRUD, проверка попадания |
| canvas-rendering | Конвейер отрисовки CanvasKit WASM |
| canvas-navigation | Панорамирование, масштабирование, инструмент «Рука» |
| selection-manipulation | Выделение кликом/рамкой, перемещение, масштабирование, поворот |
| undo-redo | Паттерн обратных команд |
| text-editing | Инструмент «Текст», Paragraph API, загрузка шрифтов |
| pen-tool | Модель векторных сетей, кривые Безье |
| auto-layout | Yoga WASM flexbox, переключение через Shift+A |
| figma-clipboard | Двусторонний бинарный Kiwi-буфер обмена |
| fig-import | Конвейер импорта .fig файлов |
| kiwi-codec | Бинарный кодек Kiwi, разреженные ID полей |
| editor-ui | Панели Vue 3, панель инструментов, палитра цветов |
| snap-guides | Привязка к краям/центрам, с учётом поворота |
| rulers | Линейки на холсте, подсветка выделения |
| group-ungroup | ⌘G / ⇧⌘G, сортировка по позиции |
| desktop-app | Tauri v2, строка меню macOS |
| testing | Playwright E2E, юнит-тесты bun:test |
| scrub-input | Ввод чисел перетаскиванием |
| tooling | Vite 7, oxlint, oxfmt, tsgo, VitePress |
## Рабочий процесс
### 1. Предложить изменение
```
/opsx:propose add-dark-mode
```
Создаёт каталог `openspec/changes/add-dark-mode/` с:
- `proposal.md` — зачем и какие изменения
- `design.md` — технический подход
- `specs/` — дельта-спецификации (ADDED/MODIFIED/REMOVED требования)
- `tasks.md` — чеклист реализации
### 2. Реализовать
```
/opsx:apply
```
Выполнение задач из tasks.md с отметкой выполненных пунктов.
### 3. Архивировать
```
/opsx:archive
```
- Объединяет дельта-спецификации с `openspec/specs/` (базовые спецификации)
- Перемещает изменение в `openspec/changes/archive/`
## Формат спецификаций
Каждый файл спецификации следует единообразной структуре:
```markdown
# capability-name Specification
## Purpose
Однострочное описание назначения этой возможности.
## Requirements
### Requirement: Name
Описание с использованием SHALL/MUST для нормативных требований.
#### Scenario: Name
- **WHEN** условие
- **THEN** ожидаемый результат
```
Каждое требование содержит хотя бы один сценарий. Сценарии — это потенциальные тест-кейсы.
## Команды CLI
```sh
openspec list # Список активных изменений
openspec show # Показать детали изменения
openspec status --change # Статус артефактов
openspec archive # Архивировать завершённое изменение
openspec update # Пересоздать навыки/промпты
```