d3ro-voice/CHANGELOG.md
Yun Chan 4872d6f6c5
Some checks failed
deploy-site / deploy (push) Failing after 10m53s
docs(release): update 1.1.0 launch metadata
2026-08-29 20:16:49 +09:00

208 lines
14 KiB
Markdown
Raw Permalink 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.

# Changelog
All notable changes to D3RO Voice will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Planned
- macOS / Linux support
- Additional Whisper model management UI
- Cloud-optional backup (encrypted, opt-in)
- Plugin system for custom pipelines
## [1.1.0] - 2026-08-29
### Added
- **Android/iOS product mobile app**: implemented account bootstrap and lifecycle, onboarding, recording and audio import, transcription, history, meetings, templates, memos, teams and invitations, notifications, knowledge, AI Talk, generated documents, data portability, and role-aware administration flows.
- **Mobile-native recording and intake**: added Android foreground recording with persistent controls and recovery, external `ACTION_SEND` audio/video intake, durable upload processing, and supported-device on-device Whisper transcription.
- **Server-verified mobile monetization**: added Google Play purchase and restore verification, entitlement reconciliation, AdMob rewarded SSV validation, and replay-safe reward receipts.
- **Generated-content safety controls**: added generation receipts, shared generative-AI safety instructions, and an authenticated report flow for owned AI-generated meeting documents.
- **Release verification tooling**: added Android artifact, App Links, production Firebase/AdMob configuration, Play asset, secret scanning, signed provenance, and publication-boundary checks.
- **Complete mobile icon set**: added canonical Android legacy/adaptive/monochrome launchers, the 512px Play icon, and all required iPhone, iPad, and App Store marketing icon slots.
### Changed
- Unified mobile authentication and invitation links on the canonical `d3ro-voice` app scheme and added fail-closed verification for the HTTPS App Links contract.
- Hardened Supabase and mobile production configuration to fail closed when required public configuration is absent or does not match the release identity.
- Expanded CI coverage across Node.js 24, .NET 10, Deno Edge Functions, React Native tests, Android emulator gates, 16 KB page-size compatibility, and reproducible release evidence.
- Aligned account deletion guidance with external subscription cancellation requirements and centralized local sensitive-data purge on logout, account deletion, and session loss.
- Centralized product version `1.1.0`, Android version code `1010001`, release notes, updater metadata, and app-store changelogs under release SSOT checks.
- Finalized benchmarked `ko-KR`/`en-US` Play listing copy and a Console-previewed
1024×500 canonical feature graphic with preserved generation prompt, source,
output, and hashes.
### Security
- Added atomic authorization and replay protection for teams, invitations, push delivery, transcription quotas, billing, ad rewards, administrative actions, data portability, and content reports.
- Removed synthetic success fallbacks from protected STT and AI paths; provider and configuration failures now return explicit failures without creating fabricated user data.
- Strengthened generated-document reporting so only the owner can report an existing document backed by immutable generation audit evidence.
- Removed the repository-exposed desktop license private key and prefix-only paid-tier activation; production now accepts only Ed25519 licenses signed by the rotated external key.
- Made Windows stable packaging fail closed unless an external public-trust code-signing PFX is provided and both the NSIS installer and unpacked app pass exact-version, updater SHA-512, Authenticode `Valid`, and expected signer-subject verification; local self-signed development certificates are rejected.
### Fixed
- Corrected realtime Edge Function model routing and type checks for team and enterprise tiers.
- Removed the legacy `d3ro://` deep-link surface to prevent divergent authentication callback identities.
## [0.2.1-alpha] - 2026-07-22
### Fixed
- **v0.2.0-alpha 치명적 버그 (앱 실행 불가)**: refactor-wave WS2(AppConfig SSOT)에서 7개 키(`customInstructions`, `llmChains`, `voiceCommandRules`, `voiceCommandsEnabled`, `activeInstructionId`, `activeChainId`, `captionAudioSource`)를 AppConfig 인터페이스에 추가하고 `as never` 16건을 제거했으나 **`CONFIG_DEFAULTS`(ConfigService.ts) 기본값을 누락** → 기존 사용자 config(0.1.x) 마이그레이션 시 `configGet()``undefined` 반환 → main 프로세스 `.map()` 크래시. `CONFIG_DEFAULTS`에 기본값(`[]`, `[]`, `[]`, `false`, `''`, `null`, `'mic'`) 추가.
- **교훈**: typecheck/lint/unit test가 GREEN이어도 런타임을 보장하지 않음. **배포 전 `npm run dev` 실행 + 산물 설치 e2e 필수** — 이번에 e2e를 건너뛰어 사용자가 발견.
## [0.2.0-alpha] - 2026-07-22
> **다운로드**: Windows `D3RO-Voice-Setup-0.2.0-alpha-x64.exe` · macOS `D3RO-Voice-0.2.0-alpha-arm64.dmg`
> (Release assets 첨부) — 기존 Windows 사용자는 자동 업데이트(4시간 주기)로 수신됩니다.
> macOS는 ad-hoc 서명 — Gatekeeper 차단 시 우클릭→열기.
Midnight Glass v2 전면 재설계 + refactor-wave 대규모 코드 품질 정리. 기능 추가보다 시각·구조 개선 중심.
### Added
- **Midnight Glass v2 전면 리디자인**: 미드나이트 네이비 + 글래스모피즘 카드(헤어라인 그라디언트 + 앰비언트 글로우) + 시안→블루→퍼플→마젠타 그라디언트. 6종 테마(dark/light/nord/solarized/catppuccin/dracula) 전환. 보더리스 UI + 커스텀 TitleBar. Pretendard Variable 폰트 오프라인 번들.
- **TiltCard DS**: 커서 추종 3D 틸트 + 스페큘러 빛 반사 (reduced-motion 완전 존중)
- **GradientWave / StatRing DS** 신규 (기존 CrtDisplay WebGL 오실로스코프를 그라디언트 스펙트럼 웨이브로 교체)
- **실시간 부분 전사**: 받아쓰기 홀드 중 RecordingTip에 interim 전사 표시
- **Windows 자동 업데이트**: electron-updater + GitLab Generic Registry feed (4시간 주기, 재시작 다이얼로그)
- **멀티플랫폼 배포**: macOS arm64(ad-hoc 서명) + Windows 동시 릴리스. GitLab Package Registry(버전별+latest) + Release 자동 생성
- **번들 Ollama v0.32.1**: 온보딩 gemma4:e4b pull 412 실패 해소, GPU 런타임 가지치기로 ~1GB→119MB 슬림화
- **gpt-realtime-2.1 라이브 음성 대화** (Premium 백엔드, OpenAI Realtime) — 로컬 파이프라인 자동 fallback
- **Whisper large-v3-turbo 기본 STT**: 6배 빠름, 사이드카 백그라운드 다운로드 API
### Fixed
- **한국어 날짜 "TODAY"/"YESTERDAY" 표시 버그** — `date.today/yesterday` 중복 정의(JSON last-wins) 해소
- **팝업/렌더러 색상 충돌** — 팝업이 v1 주황(`#f25b29`)으로 렌더되던 것을 파랑(`#3b82f6`)으로 SSOT 정합
- **받아쓰기 파이프라인 4버그**: press 액션이 STT 초기화를 await하며 큐 점유→release 지연/유령 세션; 사이드카 crash 루프; RecordingTip hide 타이머 leak; 빈 STT 가드
- **온보딩 무진행 구간 UX**: verifying(모델 검증) 단계 피드백 + 중복 실행 가드
- **마이크 테스트 조기 종료**: 초기 `level:0`을 종료 신호로 오인하던 버그
- **트레이 아이콘 빈 이미지** 버그
### Changed
- **`accent.amber``accent.main` 전면 통일** (162건, deprecated 별칭 2곳 제거) — desktop/web/admin/mobile/ui-native 전역. 6 테마 일관.
- **IPC 채널 SSOT 일원화**: `ipc-channels.ts`에 9 그룹/키 추가(INSTRUCTION, POPUP_*, CLIPBOARD, APP 등), 하드코딩 채널 문자열 제거, `ipcSuccess/ipcError` 헬퍼 통일, `catch(error)` 패턴 32건
- **AppConfig 타입 강화**: 7개 누락 키 추가, `as never` 16건 제거, dynamic `require` → static import
- **팝업 i18n**: 4종 팝업(command/history/result/recording-tip) 한국어/영어 하드코딩 → `t()` 키 주입 (`popup.*` 17키)
- **매직 리터럴 토큰화**: 인라인 fontSize/fontWeight/borderRadius → `d3roTypo`/`d3roRadius` 토큰 (렌더러 전역)
### Removed
- DS 미사용 3종: **MetalDial, ButtonGroup, CrtDisplay** (barrel export 포함)
- **미사용 의존성 8종**: `@mui/icons-material`, `@d3ro/api-client`, `fluent-ffmpeg`(+`@types`), `pdf-parse`, `node-record-lpcm16`(+`.d.ts`), `electron-audio-loopback`, `@electron-toolkit/preload`
- **i18n 고아 키 967건** (12 locale) — camelCase license.feature 15키 등 동적 참조는 P1 재검증으로 보존
- `services/index.ts` 데드 레지스트리, `electron-builder.yml` Linux 섹션
### Internal
- **refactor-wave Wave 1+2**: 정책(`docs/REFACTOR_POLICY.md`) 수립 → 공격적 감사(106건) → 9 워크스트림 병렬 → 분리 커밋 9개 + 메타 2. 공유 패키지 토큰 SSOT, IPC/타입 정합, 데드코드 대량 제거. 보고서 `docs/REFACTOR_WAVE1_REPORT.md`·`WAVE2_REPORT.md`.
---
## [1.0.0] - 2026-08-20
### Added
#### Core Pipeline (Phase 1-3)
- Electron 33 + React 19 + MUI 7 + TypeScript strict mode
- AudioCaptureService: SoX-based PCM16 16kHz mono microphone capture
- LocalSTTService: faster-whisper Python sidecar (dual-condition flush pattern)
- VoiceModeService: 9-state RecognitionState + 4-state AudioState dual state machine
- HotkeyService: uiohook-napi global keyboard hooking (hold/toggle/double-press)
- TextInsertService: clipboard save/set/Ctrl+V/restore via @nut-tree-fork/nut-js
- RecordingTip popup: 9 wave bars with cosine distribution, thinking progress bar
- ResultPopup: auto-close with mouse hover pause, copy button
- Settings modal: General/Audio/STT/LLM tabs
- System tray with close-to-tray support
#### Cursor History Popup (Phase 3.5)
- Ctrl+Shift+V global shortcut opens recent transcription history at cursor position
- Arrow key navigation, Enter to paste, 1-9 direct select, ESC dismiss
- focusable: false maintains active app focus
#### LLM Integration (Phase 4)
- LocalLLMService: Ollama REST API with NDJSON streaming
- 6 system prompts: refine/translate/summarize/grammar/expand/custom
- VoiceModeService LLM integration with original text fallback
#### Database & History (Phase 5)
- better-sqlite3 + drizzle-orm (WAL mode)
- HistoryService: CRUD + search + stats + 30-day retention policy
- DictionaryService: custom words + STT initialPrompt injection
- Dashboard with real statistics
#### Custom Instructions & i18n (Phase 6)
- CustomInstructionService: 5 presets + user-defined CRUD
- i18n system: ko/en with t() function and React context
#### Build & Test (Phase 7)
- vitest: 41 unit tests (HistoryService, DictionaryService, VoiceModeService, etc.)
- electron-builder: NSIS installer for Windows x64
- GitLab CI/CD: lint, typecheck, test, build, release pipeline
- SoX download script, PyInstaller sidecar build script
#### Speakly Pattern Enhancement (Phase 7.5)
- SoundEffectService: WAV preload, fire-and-forget playback
- AutoLaunchService: app.setLoginItemSettings
- TextInsertService: basic insertion verification
- VoiceModeService: sound effect integration on session events
#### UI Redesign (Phase 8)
- Industrial instrument aesthetic (dark theme, amber #f25b29 accent)
- Design system: 9 DS components (CrtDisplay, InstrumentPanel, Led, PhysicalButton, MetalCard, PhosphorText, MetalDial, ScreenPanel, ButtonGroup)
- d3roPalette SSOT: all colors via CSS custom properties
- HotkeyRecordModal: key combination recording UI
- DashboardPage: feature-focused layout with stats + history + system status
#### Quality & UX (Phase 9)
- 4-step onboarding wizard (welcome, mic, hotkey, Ollama)
- Microphone test UI with level meter
- Audio recording WAV file saving
- MetalDial component with drag rotation
- Ctrl+Shift+C command popup at cursor position
- Dictionary inline editing
- Ollama installation guide with nudging bubble
- Real-time UI refresh on data changes
#### Killer Features (Phase 10)
- CaptionService: 3-second chunk continuous transcription with overlay popup
- VoiceCommandService: keyword-to-command matching engine (4 preset keywords)
- ScreenContextService: active window detection + selected text capture
- ChainService: sequential LLM command pipeline with step-by-step events
- MemoService: memo tags DB table + tag CRUD + markdown export
- Shared components: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard
- Shared utilities: formatters.ts (formatDuration, getDateKey, formatNumber)
#### Monetization (Phase 11)
- LicenseService: Free/Pro/Pro+ 3-tier system
- Feature gating with 16 feature enums and tier-based access mapping
- Daily usage quota tracking (Free: 20 dictation/day, 10 LLM/day)
- LemonSqueezy API integration for license key activation
- UpgradePromptModal, ProBadge, useProFeature hook
- Settings License tab with tier comparison table
#### Pro Features (Phase 12)
- FileTranscriptionService: ffmpeg PCM conversion, 30s chunk sequential STT
- MeetingSummaryService: caption session LLM summarization
- DictationTemplateService: CRUD + session state machine, 3 presets
#### Pro+ Premium (Phase 13)
- VoiceConversationService: STT-LLM-TTS loop for voice conversations
- TTSPlaybackService: Windows SAPI via PowerShell
- RAGService: Ollama nomic-embed-text embeddings, SQLite vector storage, cosine similarity
- KnowledgeBasePage: document management, indexing progress, Q&A UI
- VoiceActionService: LLM JSON action plans, 6 presets, dangerous command blocking
#### Landing Page
- Promotional website at `site/` directory
- Vite + React 19 + Tailwind CSS
- 4 design references integrated into D3RO brand identity
- CRT screen effects, crosshair decorations, noise textures (CSS only)
- 10-language i18n: en/ko/ja/zh/es/fr/de/pt/ru/vi
- GitHub Pages auto-deployment workflow
### Technical Details
- Total IPC channels: ~200+
- Total services: 20+
- Total error codes: 0-878
- Design system components: 9
- Supported languages (app): ko, en
- Supported languages (landing): 10
- Test count: 41 unit tests
- Build target: Windows x64 NSIS installer