Andrey Epifancev 9b4ea0a3c9 docs(openspec): archive core-recording-lifecycle, promote specs (#1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QKHeGuAYh4W1jNdjMConZa
2026-09-27 19:26:25 +04:00

3.0 KiB
Raw Blame History

Proposal: core-recording-lifecycle

Issue: #1 — Core: жизненный цикл голосовой записи и очередь отправки.

Why

Плагин должен превращать голосовую диктовку (в первую очередь с iPhone) в текстовую заметку через внешний сервис распознавания. Главный риск мобильного сценария — потеря надиктованного: нет сети, Obsidian выгружен из памяти, запись оборвалась. Нужна независимая от Obsidian и покрытая тестами основа, которая сохраняет запись сразу, доводит её до текста через повторы и никогда не портит заметку.

What Changes

  • Новая чистая подсистема src/core/ (без импортов obsidian и Node API): жизненный цикл записи, планировщик повторов, формат заметки, очередь отправки поверх портов.
  • Тестовая инфраструктура проекта: сборка по шаблону obsidian-sample-plugin, vitest, фейки портов, golden-тест test-01, тест-страж границы src/core.
  • Контракт провайдера распознавания (интерфейс), который реализует следующая подсистема.
  • Без реального провайдера, UI, команд и MediaRecorder — это отдельные issue.

Capabilities

New Capabilities

  • recording-lifecycle: состояния записи, сохранение захваченного аудио, отправка, классификация ошибок, повторы с нарастающей паузой, принадлежность записи устройству, ручные команды «повторить» и «забрать все ожидающие».
  • voice-note-format: размещение и имена файлов аудио и заметок, ключи frontmatter, управляемая плагином область тела заметки, правила вставки транскрипта без порчи пользовательского текста.

Modified Capabilities

Нет.

Impact

  • Новые файлы: package.json, tsconfig.json, esbuild.config.mjs, manifest.json, vitest.config.ts, src/core/*, tests/*.
  • Зависимости (dev): typescript, esbuild, vitest, obsidian (типы), @types/node только для тестов.
  • .gitignore: добавляется .claude/worktrees/.
  • Следующие подсистемы (провайдер, обёртка Obsidian) зависят от портов и контракта Transcriber, описанных в design.md.