D3RO Voice — 멀티플랫폼 AI 음성 어시스턴트 (Monorepo & CI/CD)
Phase 5 Part 3에서 남겨둔 U2(Fix 1 직접 시연 미수행)를 해소하고, 실증 중 발견한 한글 IME Enter 중복 addMemo 버그(Bug 10)를 같이 픽스. ## Bug 10 — 한글 IME Enter 중복 addMemo - 증상: 실증 녹음 중 한글 메모 "메모 기능이 잘 작동하는지 봅니다"가 2ms 간격으로 2번 저장 (로그 21:47:57.410/.412, UUID c7f0db45 + a6e442cc). 5개 메모 중 이 하나만 중복 — 조합이 아직 확정 안 된 상태에서 Enter를 친 메모에서만 발생. - 원인: 한글 IME 조합 중 Enter → Chromium이 keydown 2번 발화 ((1) IME 조합 확정 isComposing=true/keyCode=229, (2) 실제 Enter 액션). MeetingModePage.tsx:164-174의 handleMemoKeyDown이 e.key === 'Enter' && !e.shiftKey만 검사하고 isComposing을 무시해 두 이벤트에서 모두 handleAddMemo() 발화 → IPC 2회 → addMemo() 2회. - 수정: MeetingModePage.tsx:168에 이중 가드 추가. isComposing은 모던 표준, keyCode === 229는 조합 확정 시점에 isComposing이 false로 내려가면서 keyCode만 229로 주는 Chromium 엣지 케이스 호환. - 검증: Vite HMR로 즉시 반영 후 재시연 녹음(78421e75)에서 한글 메모 5건 연속 → 전원 1:1 매핑, 중복 0. ## Fix 1 (Phase 3.3 startRecording pre-push) 직접 실증 재시연 녹음 78421e75 (21:51:24~21:51:50, 약 26초) 로그 타임라인: 21:51:24.937 pushOne meetings/78421e75 ok <- Fix 1 pre-push (676ms) 21:51:30.499 pushOne meeting_memos/4ed7e59a ok <- addMemo #1 (113ms) 21:51:32.202 pushOne meeting_memos/de011c15 ok <- addMemo #2 (78ms) 21:51:35.893 pushOne meeting_memos/3184fe5e ok <- addMemo #3 (66ms) 21:51:38.263 pushOne meeting_memos/00f041ef ok <- addMemo #4 (82ms) 21:51:40.740 pushOne meeting_memos/0808c4d2 ok <- addMemo #5 (64ms) 21:51:50.681 pushOne meetings/78421e75 ok <- _runPostProcessing (108ms) 21:51:50.709 pushOne history/70388090 ok <- CaptionService→History meetings/78421e75가 녹음 시작 + 종료 두 번 push된 것이 Fix 1의 직접 증거 — 부모 row가 메모 push 시점에 이미 Supabase에 존재했기 때문에 메모 5건이 RLS/FK 차단 없이 통과. Bug 7 재현 방지 확인. ## 잠재 IME 버그 7곳 동일 패턴의 Enter 핸들러 7곳에 가드 없음 (KnowledgeBasePage:85, VoiceConversationPage:114, MeetingChatPanel:113, EditableSegment:72, MeetingDetailTabs:242, HistoryEntryCard:65, CommandsPage:337). 다음 세션 /simplify 패스에서 일괄 처리 예정. ## 검증 - desktop tsc --noEmit EXIT=0 - Meeting 녹음 2회차 실증 통과 memory/project_status.md SaaS [11] 섹션 추가. |
||
|---|---|---|
| .claude | ||
| .github/workflows | ||
| apps | ||
| docs | ||
| memory | ||
| packages | ||
| server/supabase | ||
| site | ||
| .editorconfig | ||
| .eslintignore | ||
| .eslintrc.cjs | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .nvmrc | ||
| .prettierrc | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| SECURITY.md | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| turbo.json | ||