docs(governance): enforce OpenSpec workflow for all changes; openspec: enforce-openspec-workflow

This commit is contained in:
estorozhenko
2026-09-13 11:12:21 +00:00
parent 1cee142631
commit 568335a643
4 changed files with 132 additions and 0 deletions
@@ -0,0 +1,68 @@
# gotosocial/project-governance Specification
## Purpose
Определить обязательный процесс управления изменениями проекта: любое
изменение (код, конфигурация, документация, статусы) проводится только через
OpenSpec-воркфлоу. Введено по явному распоряжению владельца 2026-09-13.
## Requirements
### Requirement: OpenSpec-воркфлоу обязателен для всех изменений
- **MUST**: Каждое изменение проекта оформляется как openspec-change
(`openspec new change '<name>'`) с артефактами proposal → specs (delta) →
design → tasks, в соответствии со schema `spec-driven`.
- **MUST**: Реализация выполняется по задачам из `tasks.md`; каждая задача —
с реальной верификацией (команда/тест/наблюдаемое поведение), подтверждение
«сделано» без проверки не принимается.
- **MUST**: После реализации change архивируется
(`openspec archive '<name>' --yes`), delta вливается в
`openspec/specs/<capability>/`; итог валиден (`openspec validate`).
- **MUST NOT**: Прямое редактирование файлов проекта (docker-compose.yml,
config.yaml, код, системные юниты, README/STATUS/TODO, openspec/specs)
без openspec-change.
#### Scenario: Прямая правка запрещена
- **GIVEN** владелец дал задачу на изменение (например, «добавь правило в файлы»)
- **WHEN** агент хочет править файл напрямую, без openspec-change
- **THEN** действие отклоняется: сначала создаётся openspec-change,
задачи применяются, change архивируется
#### Scenario: Изменение через воркфлоу допустимо
- **GIVEN** изменение проекта (код или конфиг)
- **WHEN** создан openspec-change, задачи выполнены и верифицированы,
change заархивирован, `openspec validate` проходит
- **THEN** изменение считается легитимным и коммитится
(`feat/fix(...): ...; openspec: <change-name>`)
### Requirement: Источники правила для агентов и людей
- **MUST**: Правило зафиксировано в `AGENTS.md` (корень проекта) — файл
авто-подхватывается агентами (Hermes/Claude) при работе в проекте.
- **MUST**: Правило включено в `openspec/config.yaml` (`context`) — оно
инжектится в каждый артефакт openspec.
- **SHOULD**: Правило продублировано в `README.md` (видно человеку при
первом знакомстве с проектом).
#### Scenario: Агент видит правило
- **GIVEN** агент работает в /opt/gotosocial
- **WHEN** он открывает сессию
- **THEN** в `AGENTS.md` он находит «ЖЁСТКОЕ ТРЕБОВАНИЕ: все изменения —
через OpenSpec» с запретами и исключениями
### Requirement: Исключение только по команде владельца
- **MAY**: Прямое изменение допускается только после явной команды
владельца («сделай в обход openspec», подтверждение на прямой фикс).
- **MUST**: Исключение фиксируется в коммит-сообщении (например,
`bypass-openspec: <причина>`), чтобы оставаться аудируемым.
#### Scenario: Явный обход
- **GIVEN** владелец сказал «сделай напрямую, без openspec»
- **WHEN** агент вносит изменение
- **THEN** изменение допустимо, но помечается в коммите
(`bypass-openspec: <причина>`)