# Пилот: 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.