4.7 KiB
4.7 KiB
Пилот: 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 без брака.
Находки и что изменено
- Контроллер «на среднем уровне» запустился на Opus. Сессия поняла фразу как «уровнем ниже». → CLAUDE.md: контроллер — сабагент на sonnet, явно.
- codegraph в worktree возвращал пусто даже после
codegraph init; implementer-ы читали файлы напрямую. → CLAUDE.md: при пустом ответе отметить в ledger и не тратить раунды. Причина (индекс привязан к корню репо) — открытый вопрос. - Push в main через detached HEAD. При архивации агент сделал
git switch --detach origin/mainи запушил;git branch --show-currentпуст, хук пропустил. → guard-main: detached HEAD защищён, коммит/push в main только с файламиopenspec/; архивация объявлена единственным исключением. - Хвосты закрытия (ветка, 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.