17 KiB
Анализ openspec SDD-схемы v2: wealth-ledger-sdd
> Версия схемы: 2
> Автор анализа: AI-ассистент
> Дата: 2026-08-26
1. Общая оценка v2
A− / «Зрелая схема, готовая к production-like использованию»
Переход с v1 на v2 — качественный скачок. Из 9 рекомендаций из предыдущего анализа 5 полностью или частично учтены, при этом добавлены 4 новых сильных механизма, которых не было ни в v1, ни в рекомендациях. Схема теперь защищена от основных рисков: каскадных ошибок, scope creep, потери traceability и неконтролируемого rollback.
2. Сравнение v1 → v2: что изменилось
2.1. Schema.yaml — структурные улучшения
| Аспект | v1 | v2 | Оценка |
|---|---|---|---|
| Версия | 1 | 2 | — |
| Фазы | 4 (proposal→specs→design→tasks) | 5 (+apply) | ✅ |
| Artifact boundaries | Общие запреты | Структурированные MUST NOT include для каждой фазы | ✅✅ |
| Approval gates | Неявные («только после approval») | Explicit approval + verify script для каждой фазы | ✅✅ |
| Invalidation | Нет | Downstream approvals инвалидируются при mismatch | ✅✅ |
| Feedback routing | Нет | Чёткое указание: intent→Proposal, behavior→Specs, architecture→Design, decomposition→Tasks | ✅✅ |
| Verify script | Нет | verify-openspec-planning.sh <change> на каждой фазе |
✅ |
| Spec examples | Только ADDED | Все 4 операции (ADDED, MODIFIED, REMOVED, RENAMED) | ✅ |
| Traceability | Нет | Covers: capability-path — exact Requirement heading |
✅✅ |
| Task owner | Нет | [frontend|backend|specs|docs|workspace] |
✅ |
| Rollback | Generic Migration Plan | Rollback Contract с conditional required/N/A | ✅✅ |
2.2. Design.md — Rollback Contract
В v1 Migration Plan был generic. В v2 добавлена структурированная таблица:
Status:requiredилиN/ATrigger,Actions,Data safety,Verification— обязательны приrequiredReason— обязателен приN/A
Это превращает rollback из «пожелания» в «контракт».
2.3. Tasks.md — Traceability + Ownership
В v1 задачи были plain text. В v2:
- Owner area:
[frontend],[backend],[specs],[docs],[workspace] - Covers: явная ссылка
capability-path — exact Requirement heading - N/A rationale: для
workspacetasks — обязательное обоснование, почему нет spec-ссылки - Verification: осталась, но теперь в строгом формате
2.4. Apply phase — новая фаза
В v1 apply был неявным. В v2 — explicit phase:
- Требует approvals всех 4 предыдущих фаз
- Работает только с canonical store
- Feedback routing при mismatch
- Трекинг через checkbox'ы tasks.md
3. Какие рекомендации из v1-анализа учтены
✅ Рекомендация #2: Traceability (specs → tasks)
Реализация: Covers metadata в tasks.md
Качество: Отлично. Не просто convention, а обязательный формат. Каждый Delta Requirement должен быть покрыт хотя бы одной task. Собственные requirement IDs не вводятся — защита от «фантомных» требований.
✅ Рекомендация #3: Полный spec template с examples
Реализация: Compact operation examples в schema.yaml instruction
Качество: Хорошо. Все 4 операции (ADDED, MODIFIED, REMOVED, RENAMED) с примерами. Небольшой минус: template-файл spec.md всё ещё содержит только ADDED, но AI-агент читает instruction из schema.yaml, так что это компенсируется.
✅ Рекомендация #7: Rollback Plan
Реализация: Rollback Contract в design.md + conditional logic в schema.yaml
Качество: Отлично. Не просто секция, а structured table с обязательностью полей, зависящей от типа change. required для auth/security/migration/public contract, N/A с reason для остального.
✅ Рекомендация #1: Review gate (частично)
Реализация: Explicit approval из разговора + verify-openspec-planning.sh + «structural success ≠ approval»
Качество: Хорошо, но иначе, чем предлагалось. Вместо отдельного review.md — approval + verify script. Это меньше артефактов, но тот же контроль. Потенциальный риск: AI-агент может «считать», что approval получен, если не строго интерпретировать «explicit approval из разговора». Но verify script добавляет технический барьер.
⚠️ Рекомендация #4: Definition of Done
Статус: Не реализовано.
Комментарий: Apply phase частично закрывает этот gap (требует approvals всех фаз + verification), но нет единого артефакта done.md с completion evidence.
❌ Рекомендация #5: Зависимости между changes
Статус: Не реализовано.
Комментарий: В multi-repo с shared store это всё ещё риск. Но для pet-проекта — приемлемо.
❌ Рекомендация #6: Sizing задач
Статус: Не реализовано.
Комментарий: Для AI-агента полезно, но не критично.
❌ Рекомендация #8: Context mapping
Статус: Не реализовано.
Комментарий: Apply phase говорит «Read context files», но не указывает, какие именно. В multi-repo setup это может привести к переполнению контекста.
❌ Рекомендация #9: Convention для commit messages
Статус: Не реализовано.
Комментарий: Nice to have.
4. Новые сильные моменты (не были в рекомендациях)
4.1. Artifact Boundaries
В каждой фазе теперь явный список MUST NOT include:
- Proposal не может содержать технологии, API signatures, task decomposition
- Specs не может содержать intent вне утверждённого Proposal, internal components, test procedures
- Design не может содержать новое observable behavior, пересказ Specs, future commit identifiers
- Tasks не может содержать новое behavior, архитектурные отклонения, vague actions
Это scope creep protection на уровне инструкций. AI-агент, следуя этим границам, физически не сможет «подсунуть» решение на неправильной фазе.
4.2. Feedback Routing + Invalidation
В apply phase:
intent/scope mismatch → Proposal observable behavior mismatch → Delta Specs architecture/rollback mismatch → Design decomposition/ownership/coverage mismatch → Tasks
При обнаружении mismatch — остановить downstream work, инвалидировать approvals начиная с самого раннего затронутого artifact.
Это каскадная защита: если на этапе apply обнаружилось, что Design несовместим с Specs, не пытаться «подправить» Tasks — вернуться к Specs и начать заново.
4.3. Structural vs Semantic Validation
Явное разделение:
- Structural validation:
verify-openspec-planning.sh— проверяет формат, headers, completeness - Semantic verification: approval Change Owner — проверяет смысл
«Structural success не означает approval Change Owner» — критически важное различие для AI-агента.
4.4. Workspace Owner
[workspace] — отдельный owner для cross-area orchestration/verification. Защищает от смешивания implementation и orchestration в одной задаче. N/A Covers с concrete reason — защита от «пустых» workspace tasks.
5. Оставшиеся риски
5.1. Нет Definition of Done
Apply phase требует approvals, но не фиксирует completion evidence в виде артефакта. Нет единого места, где собраны:
- результаты всех verification actions
- proof of regression check
- confirmation of archive
Mitigation: Tasks.md с checkbox'ами частично играет эту роль, но это tracking, не evidence.
5.2. Нет управления зависимостями между changes
В shared specs store может возникнуть ситуация:
- Change A модифицирует capability X
- Change B зависит от нового behavior X
Сейчас это не выразимо в схеме. Риск параллельной работы над конфликтующими changes.
Mitigation: Для pet-проекта — ручной контроль. Для роста — добавить Dependencies в proposal.md.
5.3. Context mapping для multi-repo
Apply phase: «Read context files». Но какие? Все репозитории? Только affected? AI-агент может:
- Читать лишнее → переполнение контекста
- Пропускать релевантное → решения на неполных данных
Mitigation: Для pet-проекта — manageable. Для роста — .openspec/context.yaml с relevant_paths.
5.4. Spec.md template всё ещё неполный
Template-файл spec.md содержит только ## ADDED Requirements. Examples для MODIFIED/REMOVED/RENAMED есть в schema.yaml instruction, но template — это то, что AI «видит» первым. Риск неправильного формата при генерации.
Mitigation: Низкий — AI читает instruction перед template (в зависимости от реализации агента).
6. Итоговая таблица оценок v2
| Критерий | v1 | v2 | Δ | Комментарий |
|---|---|---|---|---|
| Разделение concerns | A | A | → | Границы стали явными (Artifact boundaries) |
| Проверяемость specs | A | A | → | Examples для всех 4 операций |
| Защита от деградации | B+ | A− | ↑↑ | Approval gates + verify + invalidation |
| Traceability | C+ | A | ↑↑↑ | Covers с capability-path + exact Requirement |
| Полнота workflow | B | B+ | ↑ | +apply phase + rollback contract |
| AI-агент friendliness | A | A+ | ↑ | Feedback routing + artifact boundaries |
| Интеграция с openspec | A− | A | ↑ | Store-aware + verify script |
| Multi-repo поддержка | B | B+ | ↑ | Workspace owner + cross-area orchestration |
| Эволюционность | B+ | A− | ↑↑ | Invalidation + 4 delta-ops |
| Документированность | A | A+ | ↑ | Artifact boundaries + structured examples |
7. Заключение
v2 — качественный скачок. Основные болевые точки v1 закрыты:
- ✅ Traceability:
Coversсвязывает tasks и specs - ✅ Rollback:
Rollback Contractделает откат предсказуемым - ✅ Scope creep protection:
Artifact boundariesна каждой фазе - ✅ Каскадная защита:
Feedback routing+invalidation - ✅ Approval discipline: explicit approvals + verify script + structural≠semantic
Что делает схему зрелой:
- Self-correcting: при mismatch есть чёткий путь назад (feedback routing)
- Self-documenting: artifact boundaries делают границы очевидными
- Self-validating: verify script + approval gates создают контрольные точки
Что можно добавить в v3 (по мере роста проекта):
done.md— Definition of Done с completion evidenceDependenciesв proposal.md — для cross-change coordination.openspec/context.yaml— для точного контекста в multi-repo- Sizing (
S/M/L) в tasks — для планирования сессий
Вердикт: Схема готова к использованию в pet-проекте любой сложности и может масштабироваться на small-team setup без существенных изменений.
8. План доработок v2 → v3 (чеклист)
Скопируй этот раздел в отдельный файл и отмечай прогресс.
8.1. Definition of Done (done.md)
- Добавить артефакт
done.mdвschema.yaml - Создать template
done.mdс секциями:- Completion Evidence (verification results)
- Regression Check
- Archive Confirmation
- Обновить
applyphase:requires: [tasks, done]
8.2. Зависимости между changes
- Добавить в
proposal.mdtemplate секцию## Dependencies - Поля:
Blocked By,Blocks,Related - В
schema.yamlдобавить валидацию: проверять, чтоBlocked Bychanges завершены
8.3. Context mapping для multi-repo
- Создать
.openspec/context.yamlв корне workspace - Маппинг:
repo name → path → relevant_paths → ignore_paths - Обновить
applyinstruction: читать context mapping передRead context files
8.4. Sizing задач
- Добавить в
tasks.mdtemplate поле**Size:** S/M/L/XL - В
schema.yamlinstruction для tasks добавить правило sizing - Определить границы: S≤1ч, M=2-4ч, L=1-2д, XL=декомпозировать
8.5. Commit convention
- Добавить в
schema.yamlapply instruction:- Формат:
[openspec:<change-id>] <type>: <description> - Примеры для spec-commits и code-commits
Refs:ссылка на change artifact
- Формат:
8.6. Spec.md template — полная версия
- Обновить
spec.mdtemplate: добавить## MODIFIED,## REMOVED,## RENAMEDс placeholder'ами - Убедиться, что AI-агент генерирует все 4 операции корректно
9. 100-балльная оценка v2
| Критерий | Вес | Баллы | Почему не максимум |
|---|---|---|---|
| Разделение concerns | 15 | 14 | spec.md template неполный |
| Проверяемость specs | 15 | 14 | verify script — внешний инструмент |
| Защита от деградации | 15 | 14 | approval «из разговора» — нет механического proof |
| Traceability | 10 | 10 | Полная |
| Полнота workflow | 10 | 8 | Нет DoD, нет зависимостей |
| AI-агент friendliness | 10 | 10 | Отлично |
| Интеграция с openspec | 10 | 9 | Нет commit convention |
| Multi-repo поддержка | 10 | 7 | Нет context mapping |
| Эволюционность | 5 | 5 | Полная |
Итого: 91 / 100
Анализ подготовлен на основе сравнения v1 и v2 файлов: schema.yaml, proposal.md, spec.md, design.md, tasks.md