feat: add mobile shell and unified search
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Failing after 50s
ci / 워크스페이스 빌드 검증 (push) Has been skipped
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 20s
ci / .NET API 서버 테스트 (push) Successful in 12s
deploy-site / deploy (push) Successful in 39s
ci / 모바일 린트·타입·Jest (push) Failing after 3h10m31s

This commit is contained in:
Yun Chan 2026-09-28 23:23:36 +09:00
parent f505a03d34
commit 5ca3709b32
98 changed files with 5168 additions and 2093 deletions

View file

@ -322,3 +322,32 @@
- **자막 받침 테마화 안 함** — 위 예외.
- **첫 실행 온보딩 Esc 닫기 안 함** — 기존 onboarding-dismiss 정책·테스트 존중, 대신 "나중에 설정" 버튼.
- **다른 8개 로케일 번역 안 함** — ko·en 만 새 문구. 나머지는 en 폴백. 한 번에 번역 맞출 것.
### 2026-09-28 추기 · 물결 ④ 모바일 셸·네이티브 DS
- 하단은 이동 전용 **홈 · 기록 · 회의 · 더보기** 4탭이다. `Record`는 녹음 상태를 보존하는 숨은 탭 경로이고,
떠 있는 녹음 버튼은 홈·기록·회의에서만 보인다. 메뉴의 받아쓰기·회의 녹음·파일 가져오기는 각각 `Record`,
`Meetings(createRequest)`, `Record(importRequest)`로 한 번씩 전달된다.
- 홈은 오늘 요약과 최근 기록·회의, 통합 검색 진입을 한 화면에 둔다. 더보기는 AI 대화·명령어·사전·지식·템플릿·
태그·팀·음성 액션·알림·데이터, 계정·요금제·기기·설정을 묶고 Admin은 역할이 있을 때만 보인다.
- `packages/ui-native`는 데스크톱 v4 원시 팔레트와 같은 dark/light 의미 토큰을 쓴다. 한글 본문은 시스템 산세리프,
숫자만 tabular numeral을 쓰며, 공용 컨트롤 최소 높이는 48dp다. 삭제된 장식용 `Header`·`AppStatusBar` 대신
새 `UnifiedSearch`와 이번 v4에서 전환한 화면은 앱의 `ScreenHeader`로 뒤로가기를 제공하고 탭 루트에는 뒤로가기를
두지 않는다. 기존 stack 화면 전부가 전환됐다는 뜻은 아니다.
- 중복 진입점이던 `DashScreen`과 `WorksHubScreen`은 삭제했다. `WorksHub`의 화면 내부 도구 검색·고정은 내비 상태를
이중 관리하던 복잡도를 줄이기 위해 의도적으로 종료했다. 목적지는 1급 탭과 더보기에서 그대로 열리며 사용자 기록·회의·
도구 데이터는 삭제하지 않는다. 과거 `works-hub-pins.v1` AsyncStorage 키는 비활성 상태로 남을 수 있다.
- 전체 모바일 Jest는 86 suites / 589 tests가 통과했다. 같은 로컬 E2E APK에서 320dp dark는
`scratch/design-audit/wave45/navigation-shell-search-320-dark-verified.xml`(1/1, 88초), 411dp light는
`scratch/design-audit/wave45/navigation-shell-search-411-light-verified.xml`(1/1, 100초)로 통과했다. 셸·두 viewport/theme
조합의 완료 증거이며 실제 TalkBack·font scale·rotation 증거는 아니다. 추적 가능한 요약은
`docs/evidence/wave45-mobile-shell-search-2026-09-28.md`에 둔다.
### 2026-09-28 추기 · 물결 ⑤ 기록+회의 통합 검색
- 검색 계약은 `@d3ro/core/types`의 `UnifiedSearch*` 타입이다. 결과는 원본을 합치지 않고 `source + id`로 기록·회의
상세에 연결하며, 검색 범위는 기록 제목/원문/교정문/요약과 회의 제목/원문 전사/편집 전사다.
- 데스크톱은 `Ctrl+K`와 사이드바 검색에서 SQLite `UnifiedSearchService`를 호출하고, 모바일은 홈에서 Supabase의
사용자 범위 기록·회의를 병렬 조회해 최신순으로 합친다. 빈 검색은 조회하지 않고 오류·재시도·빈 결과를 구분한다.
- 모바일 320dp dark와 411dp light 경로는 기록·회의 결과와 두 상세 화면 이동까지 위 canonical 보고서에서 통과했다.
통합 검색 자체는 아직 부분 완료다. 데스크톱은 소스와 자동 테스트까지만 확인했고 Electron에서 `Ctrl+K`·결과 이동을
수동으로 실행한 증거가 없다. 별도 `transcripts` 구간 검색도 없고, 모바일은 검색 때 원문 필드를 과전송하며 실행된 요청을
취소하지 않는다. 어느 표면도 FTS/index 또는 실제 대규모 데이터 성능을 증명하지 않았다.