Files
docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/kimi-audit.md
T

285 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Анализ 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/A`
- `Trigger`, `Actions`, `Data safety`, `Verification` — обязательны при `required`
- `Reason` — обязателен при `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**: для `workspace` tasks — обязательное обоснование, почему нет 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
**Что делает схему зрелой:**
1. **Self-correcting**: при mismatch есть чёткий путь назад (feedback routing)
2. **Self-documenting**: artifact boundaries делают границы очевидными
3. **Self-validating**: verify script + approval gates создают контрольные точки
**Что можно добавить в v3 (по мере роста проекта):**
1. `done.md` — Definition of Done с completion evidence
2. `Dependencies` в proposal.md — для cross-change coordination
3. `.openspec/context.yaml` — для точного контекста в multi-repo
4. 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
- [ ] Обновить `apply` phase: `requires: [tasks, done]`
### 8.2. Зависимости между changes
- [ ] Добавить в `proposal.md` template секцию `## Dependencies`
- [ ] Поля: `Blocked By`, `Blocks`, `Related`
- [ ] В `schema.yaml` добавить валидацию: проверять, что `Blocked By` changes завершены
### 8.3. Context mapping для multi-repo
- [ ] Создать `.openspec/context.yaml` в корне workspace
- [ ] Маппинг: `repo name → path → relevant_paths → ignore_paths`
- [ ] Обновить `apply` instruction: читать context mapping перед `Read context files`
### 8.4. Sizing задач
- [ ] Добавить в `tasks.md` template поле `**Size:** S/M/L/XL`
- [ ] В `schema.yaml` instruction для tasks добавить правило sizing
- [ ] Определить границы: S≤1ч, M=2-4ч, L=1-2д, XL=декомпозировать
### 8.5. Commit convention
- [ ] Добавить в `schema.yaml` apply instruction:
- Формат: `[openspec:<change-id>] <type>: <description>`
- Примеры для spec-commits и code-commits
- `Refs:` ссылка на change artifact
### 8.6. Spec.md template — полная версия
- [ ] Обновить `spec.md` template: добавить `## 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*