Зачем это нужно
В уроке 15.2 первое изменение прошло полный цикл
/opsx:explore → /opsx:propose → /opsx:apply → /opsx:archive, но мы сознательно
не задерживались на внутренней механике: что именно создает openspec init, почему
изменение - это папка, что такое дельта-спецификация и что происходит с ней при
архивации.
Этот урок - опорная точка всего модуля. Здесь собрана ментальная модель OpenSpec: living specs, изменения, дельта-спецификации, артефакты, схемы и архивация. Остальные уроки - от справочников команд (15.5-15.6) до качества спецификаций (15.10) и архитектуры OPSX (15.14) - предполагают, что эта модель уже освоена. Если вы пришли из обзорного урока 2.10, здесь та же система разобрана изнутри.
В конце урока - консолидированный глоссарий модуля: таблица соответствий английских
терминов русским эквивалентам и определения ключевых понятий. Единая терминология
вводится здесь и соблюдается во всех последующих уроках. Материал объединяет три
документа оригинала (overview.md, concepts.md, glossary.md); повторы устранены.
Основная идея
OpenSpec - легкий слой договоренностей между вами и вашим AI-агентом: вы записываете, что изменение должно делать, агент готовит детали, вы оба смотрите на один и тот же план - и только после этого пишется код. Вся идея умещается в пять слов: сначала договориться, потом уверенно строить (agree first, then build confidently).
В репозитории для этого появляются два каталога. openspec/specs/ хранит то, что
истинно прямо сейчас, - living spec (актуальную спецификацию) системы.
openspec/changes/ содержит то, что предлагается, - по одной папке на каждое
изменение. Архивация переводит предложение в истину.
Пять идей OpenSpec
Все в OpenSpec построено из пяти понятий. Освойте их - остальное детали.
1. Спецификации - это истина. Спецификация описывает, как система ведет себя
прямо сейчас. Она живет в openspec/specs/, организована по доменам (auth/,
payments/, ui/) и состоит из требований («the system SHALL expire sessions after
30 minutes») и сценариев - конкретных примеров формата given/when/then. Спецификация -
это единый согласованный ответ на вопрос «что эта программа делает?».
2. Изменение - одна единица работы. Когда нужно добавить, изменить или убрать
поведение, создается изменение: папка в openspec/changes/, содержащая все об этой
работе в одном месте. Proposal, design, список задач и правки спецификаций. Одно
изменение, одна папка, одна функциональность.
3. Дельты описывают изменение, а не весь мир. Внутри изменения вы не
переписываете спецификацию целиком. Пишется маленькая дельта: ADDED - это требование
добавлено, MODIFIED - это изменено, REMOVED - вот это удалено. Именно этот прием
позволяет OpenSpec хорошо редактировать существующие системы, а не только
проектировать новые с чистого листа. Описывается diff, а не конечное состояние.
4. Артефакты строятся друг на друге. Изменение содержит несколько документов, создаваемых в естественном порядке - proposal → specs → design → tasks → implement, - и каждый дает контекст следующему. К любому артефакту можно вернуться в любой момент: это «включатели», а не ворота.
5. Архивация сворачивает изменение обратно в истину. Когда работа завершена,
изменение архивируется. Его дельты сливаются в основные спецификации, а папка
изменения переезжает в changes/archive/ с датой в имени. Теперь спецификации
описывают новую реальность, и вы готовы к следующему изменению. Цикл замыкается.
Разделение «спецификации - изменения» - ключ ко всей механике: над несколькими изменениями можно работать параллельно, изменение можно проревьюить до того, как оно повлияет на основные спецификации, а при архивации дельты сливаются в источник истины чисто и предсказуемо.
Спецификации
Спецификации описывают поведение системы через структурированные требования и сценарии. Такой массив называют living spec - актуальной спецификацией: она фиксирует не то, что когда-то планировалось, а то, как система работает прямо сейчас.
Структура каталога
openspec/specs/
├── auth/
│ └── spec.md # поведение аутентификации
├── payments/
│ └── spec.md # обработка платежей
├── notifications/
│ └── spec.md # система уведомлений
└── ui/
└── spec.md # поведение интерфейса и темы
Спецификации организуются по возможностям (capabilities) - логическим группировкам, имеющим смысл для вашей системы. Типовые паттерны:
- по функциональным областям:
auth/,payments/,search/; - по компонентам:
api/,frontend/,workers/; - по ограниченным контекстам (bounded context):
ordering/,fulfillment/,inventory/.
«Возможность (capability)» и «домен (domain)» употребляются как синонимы. Когда в возможности не остается ни одного требования, она «отправляется на пенсию» (раздел про дельты).
Формат спецификации
Спецификация состоит из требований, и у каждого требования - сценарии:
# Auth Specification
## Purpose
Authentication and session management for the application.
## Requirements
### Requirement: User Authentication
The system SHALL issue a JWT token upon successful login.
#### Scenario: Valid credentials
- GIVEN a user with valid credentials
- WHEN the user submits login form
- THEN a JWT token is returned
### Requirement: Session Expiration
The system MUST expire sessions after 30 minutes of inactivity.
#### Scenario: Idle timeout
- GIVEN an authenticated session
- WHEN 30 minutes pass without activity
- THEN the session is invalidated
- AND the user must re-authenticate
Ключевые элементы формата:
| Элемент | Назначение |
|---|---|
## Purpose |
краткое описание предметной области спецификации |
### Requirement: |
конкретное поведение, которое должна иметь система |
#### Scenario: |
конкретный пример требования в действии |
| SHALL/MUST/SHOULD | ключевые слова RFC 2119 о силе требования |
Требования - это «что», сценарии - это «когда»
Требования формулируют «что» - что система должна делать, без привязки к реализации. Сценарии дают «когда» - конкретные проверяемые примеры. Хороший сценарий:
- тестируем: по нему можно написать автоматический тест;
- покрывает и happy path, и граничные случаи;
- использует структурированный формат Given/When/Then или похожий.
Ключевые слова RFC 2119
Слова MUST, SHALL, SHOULD и MAY несут стандартизированное значение о строгости требования (название - от документа интернет-стандартов RFC 2119):
- MUST/SHALL - абсолютное требование;
- SHOULD - рекомендация, допускающая исключения;
- MAY - необязательное поведение.
Чем спецификация является - и чем не является
Спецификация - это поведенческий контракт, а не план реализации. Хорошее содержимое:
- наблюдаемое поведение, на которое полагаются пользователи или смежные системы;
- входы, выходы и условия ошибок;
- внешние ограничения (безопасность, приватность, надежность, совместимость) и сценарии, которые можно явно проверить.
Чего избегать: внутренних имен классов и функций, выбора библиотек или фреймворков,
пошаговых деталей реализации, детальных планов исполнения (их место - design.md и
tasks.md).
Быстрая проверка: если реализацию можно изменить, не меняя наблюдаемое извне поведение, - это скорее всего не относится к спецификации.
Прогрессивная строгость
OpenSpec стремится избежать бюрократии: используйте минимальный уровень строгости, при котором изменение остается проверяемым.
Lite-спецификация (по умолчанию): короткие требования, сформулированные через поведение; ясные рамки и не-цели; несколько конкретных проверок приемки.
Полная спецификация (для повышенного риска): изменения, затрагивающие несколько команд или репозиториев; изменения контрактов API, миграции, вопросы безопасности и приватности; изменения, где неоднозначность может привести к дорогой переделке.
Большинство изменений должно оставаться в Lite-режиме.
Человек и агент
Во многих командах люди исследуют задачу, а агенты готовят артефакты. Цикл такой:
- Человек задает намерение, контекст и ограничения.
- Агент превращает их в требования и сценарии, сформулированные через поведение.
- Агент держит детали реализации в
design.mdиtasks.md, а не вspec.md. - Валидация подтверждает структуру и ясность до начала реализации.
Так спецификации остаются читаемыми для людей и согласованными для агентов.
Изменения
Изменение - предлагаемая модификация системы, упакованная в папку со всем, что нужно для ее понимания и реализации.
Структура изменения
openspec/changes/add-dark-mode/
├── proposal.md # зачем и что
├── design.md # как (технический подход)
├── tasks.md # чек-лист реализации
├── .openspec.yaml # метаданные изменения (необязательно): schema, created,
│ # skip_specs, retire_capabilities
└── specs/ # дельта-спецификации
└── ui/
└── spec.md # что меняется в ui/spec.md
Каждое изменение самодостаточно. В нем есть:
- артефакты - документы, фиксирующие намерение, проект и задачи;
- дельта-спецификации - описания того, что добавляется, меняется или удаляется;
- метаданные - необязательная конфигурация конкретного изменения.
Почему изменение - это папка
Упаковка изменения в папку дает четыре выгоды:
- Все вместе. Proposal, design, tasks и спецификации живут в одном месте.
- Параллельная работа. Несколько изменений существуют одновременно, не мешая друг
другу: можно работать над
add-dark-mode, пока в прогрессеfix-auth-bug. - Чистая история. При архивации изменения переезжают в
changes/archive/с полным контекстом. Позже можно понять не только что изменилось, но и почему. - Удобное ревью. Папку изменения легко открыть: прочитать proposal, проверить design, посмотреть дельты спецификаций.
Артефакты
Артефакты - документы внутри изменения, которые направляют работу.
Поток артефактов
Proposal - proposal.md
Proposal (предложение об изменении) фиксирует намерение, рамки и подход на верхнем уровне. Это первый создаваемый артефакт.
# Proposal: Add Dark Mode
## Intent
Users have requested a dark mode option to reduce eye strain
during nighttime usage and match system preferences.
## Scope
In scope:
- Theme toggle in settings
- System preference detection
- Persist preference in localStorage
Out of scope:
- Custom color themes (future work)
- Per-page theme overrides
## Approach
Use CSS custom properties for theming with a React context
for state management. Detect system preference on first load,
allow manual override.
Когда обновлять proposal: изменились рамки (сузились или расширились), прояснилось намерение, подход принципиально сместился.
Дельта-спецификации - specs/
Дельты описывают, что меняется относительно текущих спецификаций. Полный разбор формата - в разделе «Дельта-спецификации» ниже.
Design - design.md
Design фиксирует технический подход и архитектурные решения. Для простых изменений его можно пропустить.
# Design: Add Dark Mode
## Technical Approach
Theme state managed via React Context to avoid prop drilling.
CSS custom properties enable runtime switching without class toggling.
## Architecture Decisions
### Decision: Context over Redux
Using React Context for theme state because:
- Simple binary state (light/dark)
- No complex state transitions
- Avoids adding Redux dependency
## File Changes
- `src/contexts/ThemeContext.tsx` (new)
- `src/components/ThemeToggle.tsx` (new)
- `src/styles/globals.css` (modified)
Когда обновлять design: реализация показала, что подход не работает; найдено лучшее решение; изменились зависимости или ограничения.
Tasks - tasks.md
Tasks - чек-лист реализации: конкретные шаги с чекбоксами.
# Tasks
## 1. Theme Infrastructure
- [ ] 1.1 Create ThemeContext with light/dark state
- [ ] 1.2 Add CSS custom properties for colors
- [ ] 1.3 Implement localStorage persistence
- [ ] 1.4 Add system preference detection
## 2. UI Components
- [ ] 2.1 Create ThemeToggle component
- [ ] 2.2 Add toggle to settings page
- [ ] 2.3 Update Header to include quick toggle
Практики ведения задач:
- группируйте связанные задачи под заголовками;
- используйте иерархическую нумерацию (1.1, 1.2 и так далее);
- держите задачи достаточно мелкими, чтобы выполнять за одну сессию;
- указывайте, как проверяется каждая задача (тест, команда или наблюдаемый результат);
- размещайте тесты и документацию, которых требует группа задач, внутри этой же группы;
- отмечайте задачи выполненными по мере продвижения.
Во время /opsx:apply агент работает по этому списку и отмечает пункты по мере
выполнения.
Дельта-спецификации
Дельта-спецификация (delta spec) - ключевое понятие, благодаря которому OpenSpec работает для brownfield-разработки. Дельта описывает, что меняется, а не пересказывает всю спецификацию целиком.
Формат дельты
# Delta for Auth
## ADDED Requirements
### Requirement: Two-Factor Authentication
The system MUST support TOTP-based two-factor authentication.
#### Scenario: 2FA enrollment
- GIVEN a user without 2FA enabled
- WHEN the user enables 2FA in settings
- THEN a QR code is displayed for authenticator app setup
- AND the user must verify with a code before activation
## MODIFIED Requirements
### Requirement: Session Expiration
The system MUST expire sessions after 15 minutes of inactivity.
(Previously: 30 minutes)
#### Scenario: Idle timeout
- GIVEN an authenticated session
- WHEN 15 minutes pass without activity
- THEN the session is invalidated
## REMOVED Requirements
### Requirement: Remember Me
(Deprecated in favor of 2FA. Users should re-authenticate each session.)
Секции дельты и эффект при архивации
| Секция | Смысл | Что происходит при архивации |
|---|---|---|
## ADDED Requirements |
новое поведение | дописывается в основную спецификацию |
## MODIFIED Requirements |
измененное поведение | заменяет существующее требование |
## REMOVED Requirements |
устаревшее поведение | удаляется из основной спецификации; удаление последнего требования «отправляет возможность на пенсию» и удаляет файл спецификации, если изменение объявляет retire_capabilities: true |
## Purpose |
назначение новой возможности | становится секцией Purpose создаваемой основной спецификации; игнорируется, если спецификация уже существует |
Почему дельты, а не полные спецификации
- Ясность. Дельта показывает точно, что меняется; полную спецификацию пришлось бы мысленно сравнивать с текущей версией.
- Без конфликтов. Два изменения могут трогать один файл спецификации, не конфликтуя, пока они меняют разные требования.
- Эффективное ревью. Ревьюер видит изменение, а не неизменный контекст.
- Пригодность для brownfield. Большая часть работы - модификация существующего поведения. Дельты делают модификацию полноценной частью процесса, а не запоздалой мыслью.
Инженерный вывод курса: дельта-спецификация - это diff для поведенческого контракта,
полный аналог git diff, но не для кода, а для требований. Как и в git, вы читаете
diff, чтобы понять изменение, и применяете его, чтобы обновить «рабочую копию» -
основные спецификации. Вся механика OpenSpec держится на этой аналогии.
«Включатели, а не ворота»
Эта фраза встречается в документации OpenSpec повсюду, поэтому зафиксируем, что она значит.
Классические процессы со спецификациями устроены как waterfall: закончить
планирование, только потом разрешена реализация, вернуться назад больно. OpenSpec
отказывается от этой модели. Порядок proposal → specs → design → tasks показывает,
что становится возможным далее, а не что вы обязаны делать далее.
Обнаружили посреди реализации, что design ошибочен? Отредактируйте design.md и
продолжайте. Поняли, что рамки стоит сузить? Обновите proposal. Ничего не
блокируется: зависимости существуют только чтобы у агента был нужный контекст, а не
чтобы запереть вас в фазах.
Сильная сторона - честность: реальная работа грязная и итеративная, и OpenSpec позволяет ей быть такой. Плата - самодисциплина: вы сами отвечаете за то, чтобы изменение оставалось сфокусированным. Рабочие привычки для этого разобраны в уроке 15.8.
Схемы
Схемы определяют типы артефактов workflow и их зависимости.
Как устроена схема
# openspec/schemas/spec-driven/schema.yaml
name: spec-driven
artifacts:
- id: proposal
generates: proposal.md
requires: [] # нет зависимостей, можно создавать первым
- id: specs
generates: specs/**/*.md
requires: [proposal] # нужен proposal до создания
- id: design
generates: design.md
requires: [proposal] # можно создавать параллельно со specs
- id: tasks
generates: tasks.md
requires: [specs, design] # нужны specs и design
Граф зависимостей
Артефакты образуют граф зависимостей:
Это DAG (directed acyclic graph): стрелки указывают только вперед, циклов нет. OpenSpec использует граф, чтобы определять, что можно создавать следующим.
Зависимости - «включатели», а не ворота: они показывают, что возможно создать. Design можно пропустить, если он не нужен; specs можно создавать до или после design - оба зависят только от proposal.
Встроенная схема spec-driven
Схема по умолчанию - spec-driven: стандартный workflow спецификация-ориентированной
разработки.
proposal → specs → design → tasks → implement
Она подходит для большинства фичевой работы - там, где важно согласовать спецификации до реализации.
Кастомные схемы
Под workflow команды можно создать собственную схему:
# создать с нуля
openspec schema init research-first
# или форкнуть существующую
openspec schema fork spec-driven research-first
Пример кастомной схемы:
# openspec/schemas/research-first/schema.yaml
name: research-first
artifacts:
- id: research
generates: research.md
requires: [] # сначала исследование
- id: proposal
generates: proposal.md
requires: [research] # proposal на основе исследования
- id: tasks
generates: tasks.md
requires: [proposal] # без specs/design, сразу к задачам
Полный разбор кастомизации - в уроке 15.13.
Архивация
Архивация завершает изменение: дельты сливаются в основные спецификации, а само изменение сохраняется в историю.
Что происходит при архивации
До архивации:
openspec/
├── specs/
│ └── auth/
│ └── spec.md ◄────────────────┐
└── changes/ │
└── add-2fa/ │
├── proposal.md │
├── design.md │ слияние
├── tasks.md │
└── specs/ │
└── auth/ │
└── spec.md ─────────┘
После архивации:
openspec/
├── specs/
│ └── auth/
│ └── spec.md # теперь содержит требования 2FA
└── changes/
└── archive/
└── 2025-01-24-add-2fa/ # все артефакты нетронуты: proposal,
# design, tasks, specs
Процесс архивации
- Слить дельты. Каждая секция дельты (ADDED/MODIFIED/REMOVED) применяется к соответствующей основной спецификации.
- Переместить в архив. Папка изменения переезжает в
changes/archive/с префиксом даты. - Сохранить контекст. Все артефакты остаются нетронутыми - к ним можно вернуться, чтобы понять, почему изменение было сделано.
Родственное действие - синхронизация (sync): слияние дельт изменения в основные
спецификации без архивации. Обычно она происходит автоматически (архивация сама
предлагает ее выполнить), но доступна и отдельно как /opsx:sync для долгоживущих
изменений.
Зачем архивировать
- Чистое состояние. В активных изменениях (
changes/) видно только то, что в работе. Завершенное уходит с дороги. - Аудиторский след. Архив сохраняет полный контекст: proposal объясняет «почему», design - «как», tasks показывают проделанную работу.
- Эволюция спецификаций. Спецификации растут органически по мере архивации изменений: каждая архивация вливает свои дельты.
Как всё связано вместе
Полный цикл работы OpenSpec от начала изменения до архивации:
«Добродетельный цикл» выглядит так:
1. Спецификации описывают текущее поведение
2. Изменения предлагают модификации (в виде дельт)
3. Реализация делает изменения реальными
4. Архивация вливает дельты в спецификации
5. Спецификации теперь описывают новое поведение
6. Следующее изменение строится на обновленных спецификациях
Повседневный цикл команд
В настройках по умолчанию рабочий день выглядит так: сначала (необязательно) обдумать задачу, затем одна команда готовит план, вы читаете его, следующая - реализует, последняя - убирает в архив.
/opsx:explore → (необязательно) сначала обдумать с AI
/opsx:propose add-dark-mode → AI готовит proposal, specs, design, tasks
(вы читаете и правите план)
/opsx:apply → AI реализует, отмечая задачи
/opsx:archive → спецификации обновлены, изменение заархивировано
Если сомневаетесь - начинайте с исследования. /opsx:explore - «партнер по
размышлению» без ставок: агент читает код, раскладывает варианты и превращает
расплывчатую идею в конкретный план до того, как написан хоть один файл кода, -
противоядие от агента, который иначе построит что-то по смутному промпту.
Точно знаете, что хотите? Переходите сразу к /opsx:propose. Explore входит в профиль
по умолчанию, так что команда всегда под рукой; подробный разбор - в уроке
15.7.
Все это - слэш-команды в чате AI-ассистента; установка и инициализация происходят в терминале. Это разделение - самая частая точка путаницы, и урок 15.4 разбирает его отдельно.
Стоит ли это дополнительной работы
Честно: OpenSpec добавляет шаг. Перед реализацией пишется короткий план. Что взамен?
- Ошибочные повороты ловятся раньше, чем станут дорогими. Исправить недопонимание в proposal объемом в один абзац - бесплатно; после того, как агент написал 400 строк, - нет.
- План и код живут в одном репозитории. Полгода спустя спецификация расскажет вам (и следующей сессии AI), почему система работает именно так.
- Изменения можно ревьюить. Папка изменения - аккуратный пакет: прочитать proposal, просмотреть дельты, проверить задачи. Никакой археологии в истории чата.
- Подходит для существующих кодовых баз. Благодаря дельтам можно описать изменение в приложении на 50 000 строк, не документируя его целиком заранее.
И честная плата: для действительно тривиальной однострочной правки церемония может не окупиться - и это нормально. OpenSpec задуман легким, но не бесплатным: применяйте его там, где важна договоренность, - а с AI-агентом это оказывается большую часть времени.
Терминология модуля
Глоссарий ниже консолидирует терминологию всего модуля: он объединяет glossary.md
оригинала с решениями плана модуля. Английский термин дается при первом упоминании
вместе с русским эквивалентом, дальше - русский вариант.
Соответствие английских и русских терминов
| Группа | Термин оригинала | Употребление в курсе |
|---|---|---|
| Ядро: спецификации и изменения | spec | спецификация |
| living spec | living spec (актуальная спецификация) | |
| source of truth | источник истины (openspec/specs/) |
|
| change | изменение | |
| change proposal | proposal (предложение об изменении) | |
| artifact | артефакт | |
| delta spec | дельта-спецификация (delta spec) | |
| capability | возможность (capability) | |
| domain | домен - логическая группировка спецификаций | |
| Внутри спецификации | requirement | требование |
| scenario | сценарий | |
| RFC 2119 keywords | ключевые слова RFC 2119 (MUST, SHALL, SHOULD, MAY) | |
| Жизненный цикл | archive | архив; архивация |
| sync | синхронизация (sync) | |
| brownfield | brownfield (существующий проект) | |
| Workflow и команды | OPSX | OPSX (имя workflow, не переводится) |
| workflow | workflow | |
| slash command | слэш-команда | |
| coding agent | coding-агент | |
| CLI | CLI openspec |
|
| interactive mode | интерактивный режим | |
| profile | профиль (набор слэш-команд) | |
| skill | skill (не переводится, имя механизма) | |
| command file | файл команды | |
| delivery | доставка (skills, файлы команд или оба) | |
| Кастомизация | schema | схема |
| template | шаблон | |
| project config | конфигурация проекта (openspec/config.yaml) |
|
| context injection | инъекция контекста | |
| dependency graph | граф зависимостей | |
| enablers, not gates | «включатели, а не ворота» | |
| Координация между репозиториями (beta) | Store | Store (имя функциональности, не переводится) |
| reference | ссылка на Store (reference) | |
| working context | рабочий контекст | |
| workset | workset (личный набор папок) |
Термины последней группы нужны, только когда планирование расползается на несколько репозиториев; функциональность в статусе beta, разбор - в уроке 15.12.
Русские определения ключевых терминов
| Термин | Определение |
|---|---|
| Спецификация (spec) | документ, описывающий поведение части системы; состоит из требований и сценариев и является согласованным ответом на вопрос «что эта программа делает?» |
| Источник истины (source of truth) | каталог openspec/specs/ в целом: текущее согласованное поведение системы; изменения предлагают в него правки, архивация применяет их |
| Living spec | актуальная спецификация: массив openspec/specs/, описывающий не план, а то, как система работает сейчас |
| Изменение (change) | одна единица работы в папке openspec/changes/<name>/: proposal, design, tasks и дельты; одно изменение - одна функциональность или один фикс |
| Возможность (capability) | логическая группировка спецификаций (auth/, payments/, ui/); синоним - домен |
| Требование (requirement) | отдельное поведение, которое должна иметь система; формулируется, как правило, с ключевым словом RFC 2119; отвечает на «что», а не «как» |
| Сценарий (scenario) | конкретный проверяемый пример требования, обычно в форме Given/When/Then; по хорошему сценарию можно написать автоматический тест |
| Ключевые слова RFC 2119 | MUST, SHALL, SHOULD, MAY - стандартизированные градации строгости требований; MUST и SHALL абсолютны, SHOULD - рекомендация с исключениями, MAY - опционально |
| Артефакт (artifact) | документ внутри изменения: proposal, дельта-спецификации, design или tasks; создаются в порядке зависимостей и питают друг друга |
Proposal (proposal.md) |
«зачем» и «что» изменения: намерение, рамки и подход на верхнем уровне; первый создаваемый артефакт |
Design (design.md) |
«как»: технический подход, архитектурные решения и файлы, которые предстоит затронуть; для простых изменений необязателен |
Tasks (tasks.md) |
чек-лист реализации с чекбоксами; агент проходит его во время /opsx:apply и отмечает пункты по мере выполнения |
| Дельта-спецификация (delta spec) | спецификация внутри изменения, описывающая только изменения (ADDED/MODIFIED/REMOVED) относительно текущих спецификаций; именно она позволяет чисто редактировать существующие системы |
| Схема (schema) | определение того, какие артефакты есть в workflow и как они зависят друг от друга; встроенная схема по умолчанию - spec-driven; схемы можно форкать и писать свои |
| Граф зависимостей (dependency graph) | DAG из связей requires: между артефактами; по нему OpenSpec определяет, что можно создавать следующим |
| «Включатели, а не ворота» (enablers, not gates) | принцип: зависимости артефактов показывают, что становится возможным далее, а не что обязательно; любой артефакт можно править в любой момент |
| Архивация (archive) | завершение изменения: дельты сливаются в основные спецификации, папка переезжает в openspec/changes/archive/YYYY-MM-DD-<name>/; после этого спецификации описывают новую реальность |
| Синхронизация (sync) | слияние дельт изменения в основные спецификации без архивации; обычно предлагается при архивации, но доступна и отдельно как /opsx:sync для долгоживущих изменений |
| Слэш-команда (slash command) | команда, набираемая в чате AI-ассистента, например /opsx:propose; управляет workflow, но не является терминальной командой |
| CLI | программа openspec, запускаемая в терминале: инициализирует проект, валидирует и перечисляет изменения, открывает dashboard, архивирует |
| OPSX | текущий стандартный workflow OpenSpec, построенный вокруг гибких действий вместо жестких фаз; все его слэш-команды начинаются с /opsx: |
| Профиль (profile) | набор слэш-команд, установленных в проекте: core (по умолчанию) - propose, explore, apply, update, sync, archive; expanded добавляет new, continue, ff, verify, bulk-archive, onboard |
Практика
- Откройте проект из урока 15.2 (или выполните
openspec initв свежем тестовом каталоге, как в уроке 15.1). - Постройте дерево
openspec/: найдитеspecs/иchanges/, определите, какие возможности уже описаны. - Откройте папку созданного изменения и прочитайте артефакты в порядке потока:
proposal.md→specs/→design.md→tasks.md. Какие секции встречаются в дельте и что каждая означает? - Для одной возможности из
specs/выпишите название требования, использованное ключевое слово RFC 2119 и сценарии. Проверьте себя быстрым тестом: нет ли в спецификации внутренних имен классов или деталей реализации? - Нарисуйте граф зависимостей для гипотетической схемы
research → proposal → specs → tasks(без design). Какие артефакты можно создавать параллельно?
Краткое резюме
Ментальная модель OpenSpec умещается в два каталога и пять идей: openspec/specs/ -
living spec, источник истины о текущем поведении системы; openspec/changes/ -
предлагаемые модификации, по одной папке на изменение.
- Спецификация состоит из требований (ключевые слова RFC 2119) и сценариев (Given/When/Then); это поведенческий контракт, а не план реализации.
- Изменение - самодостаточная папка с артефактами
proposal.md,design.md,tasks.mdи дельта-спецификациями вspecs/. - Дельта описывает только ADDED/MODIFIED/REMOVED относительно текущих спецификаций - поэтому OpenSpec удобен для brownfield.
- Артефакты строятся друг на друге (proposal → specs → design → tasks), но это «включатели», а не ворота: любой документ можно править в любой момент.
- Схема (по умолчанию
spec-driven) задает типы артефактов и их граф зависимостей; схемы можно форкать и писать свои. - Архивация сливает дельты в основные спецификации и убирает папку изменения в
changes/archive/с датой - спецификации описывают новую реальность; термины модуля сведены в глоссарий выше и действуют во всех уроках 15.1-15.15.
Вопросы для самопроверки
- Какие два каталога образуют
openspec/и какую роль играет каждый? Что происходит с ними при архивации изменения? - Чем дельта-спецификация отличается от полной и какие секции в ней бывают? Что происходит с каждой секцией при архивации?
- Что означает принцип «включатели, а не ворота»? Приведите пример ситуации, когда разрешено вернуться к уже созданному артефакту.
- Чем MUST и SHALL отличаются от SHOULD и MAY в требованиях? Почему сценарий должен быть проверяемым?
- Что, согласно быстрому тесту из урока, не должно попадать в спецификацию?
- Что определяет схема и какие артефакты с какими зависимостями входят во встроенную
схему
spec-driven?
Что дальше
Урок 15.4 разбирает, где какая команда
выполняется: CLI openspec в терминале и слэш-команды /opsx:* в чате агента,
интерактивный режим, вариации написания команд в разных инструментах и типичную
ошибку новичка.