44 lines
4.9 KiB
Markdown
44 lines
4.9 KiB
Markdown
# Пилот: obsidian-voice-note, core-recording-lifecycle
|
||
|
||
Первая подсистема плагина голосовых заметок для Obsidian (жизненный цикл записи и очередь отправки) прошла цикл целиком за один день: фраза → issue #1 → brainstorming → спека → план на 10 задач → SDD → PR #2 → merge → archive → close.
|
||
|
||
| Показатель | Значение |
|
||
|---|---|
|
||
| Brainstorming → утверждённая спека | ~35 мин, 5 вопросов, 3 подхода, дизайн в 4 частях |
|
||
| План | 2528 строк, 10 задач с полным кодом, Review Focus 5 пунктов, spec coverage |
|
||
| Исполнение SDD | 1 ч 35 мин, без вопросов к человеку |
|
||
| Ревью с первого раза | 8 из 10; 2 раунда фиксов (один косметический: подпись коммита) |
|
||
| Финальное ревью (opus) | 0 critical, 1 important, 3 minor, одна волна фиксов, 7/7 addressed |
|
||
| Тесты | 125/125, golden сошёлся с первого прогона; `src/core` 670 строк |
|
||
| Модели исполнителей | haiku 7 задач, sonnet 3; ревьюеры sonnet, финал opus |
|
||
| Решения без обсуждения | 36 в design.md (28 спека/план, 8 исполнение) |
|
||
| Обрыв контроллера | случайная остановка перед Task 1; возобновился из ledger без потерь |
|
||
|
||
## Что подтвердилось
|
||
|
||
- Автотриггер brainstorming без вызова по имени; skills OpenSpec его не перехватили.
|
||
- Спека легла в `openspec/changes/`, issue завёл агент, worktree создал сам после блокировки хуком.
|
||
- Раздел «Decisions made without discussion» ведётся на всех этапах, включая контроллер SDD; агент сам убрал из него пункт, который предложил человек.
|
||
- Контроллер следовал спеке как источнику истины против плана (рулинг F-1) — правильно.
|
||
- Подробный план с кодом → большинство задач на haiku без брака.
|
||
|
||
## Находки и что изменено
|
||
|
||
1. **Контроллер «на среднем уровне» запустился на Opus.** Сессия поняла фразу как «уровнем ниже». → CLAUDE.md: контроллер — сабагент на sonnet, явно.
|
||
2. **codegraph в worktree возвращал пусто** даже после `codegraph init`; implementer-ы читали файлы напрямую. → CLAUDE.md: при пустом ответе отметить в ledger и не тратить раунды. Причина найдена 28.09: MCP-сервер codegraph стартует с корнем основного checkout, где на момент пилота был только скелет; код писался в worktree, чей индекс MCP не читал. Решение: `codegraph init` в worktree + `projectPath` в вызовах.
|
||
3. **Push в main через detached HEAD.** При архивации агент сделал `git switch --detach origin/main` и запушил; `git branch --show-current` пуст, хук пропустил. → guard-main: detached HEAD защищён, коммит/push в main только с файлами `openspec/`; архивация объявлена единственным исключением.
|
||
4. Хвосты закрытия (ветка, worktree, pull main) оставались человеку. → чеклист закрытия из 6 пунктов в CLAUDE.md.
|
||
|
||
## Мелкие наблюдения
|
||
|
||
- Первый тест хука: агент обошёл блокировку Write через `echo >`. Bash добавлен в matcher.
|
||
- Вставленный текст без своей строки вызывает вопрос-подтверждение; добавлять слово перед вставкой.
|
||
- haiku дважды подписал коммит своим именем вместо трейлера из плана.
|
||
- Версии зависимостей не зафиксированы (TypeScript 7, vitest 5, esbuild 0.28).
|
||
|
||
## Отложено до следующей фичи
|
||
|
||
- T1: Node-глобалы (`process`, `Buffer`) проходят проверку типов в `src/core`; страж ловит только импорты. Bounded-фикс до обёртки.
|
||
- Зафиксировать версии зависимостей. Bounded-фикс.
|
||
- Провайдер распознавания (AITUNNEL, OpenAI-compatible) — issue #2. Обёртка Obsidian — issue #3.
|