claude-harness/docs/PILOT-2026-09-27.md

44 lines
4.9 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.

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