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
52 lines
4 KiB
Markdown
52 lines
4 KiB
Markdown
# Wave 4/5 모바일 셸·통합 검색 검증 요약 — 2026-09-28
|
|
|
|
이 문서는 `.gitignore` 대상인 `scratch/design-audit/wave45/`의 로컬 원본을 대신해 커밋 가능한 메타데이터와 판정 경계를 남긴다. 비밀값이 들어갈 수 있는 Maestro debug bundle과 로그는 복사하지 않았고, 아래에는 테스트 자격 증명이 없다.
|
|
|
|
## 실행 대상
|
|
|
|
| 항목 | 값 |
|
|
|---|---|
|
|
| package | `com.d3ro.voice` |
|
|
| versionName | `1.9.0-e2e.20260928.2` |
|
|
| versionCode | `202609282` |
|
|
| APK | `apps/mobile-rn/android/app/build/outputs/apk/e2e/app-e2e.apk` |
|
|
| 크기 | 147063583 bytes |
|
|
| SHA-256 | `96EBA2A47E54033EB0DEFCE4E4D282F1D06F162A5F7DF9457E99609D98745D58` |
|
|
|
|
이 APK는 로컬 Wave 4/5 E2E artifact다. production 서명 APK/AAB, Play track, Play 설치 또는 production release provenance 증거가 아니다.
|
|
|
|
## 자동·런타임 결과
|
|
|
|
| 게이트 | 결과 | 원본 |
|
|
|---|---|---|
|
|
| 모바일 전체 Jest | **86 suites / 589 tests PASS** | `npm --prefix apps/mobile-rn test` |
|
|
| 320dp dark journey | **1/1 PASS, 0 failure, 88.0 s** | `scratch/design-audit/wave45/navigation-shell-search-320-dark-verified.xml` |
|
|
| 411dp light journey | **1/1 PASS, 0 failure, 100.0 s** | `scratch/design-audit/wave45/navigation-shell-search-411-light-verified.xml` |
|
|
|
|
원본 XML 무결성:
|
|
|
|
- 320dp dark: 440 bytes, SHA-256 `55AA0A3FDAF07B9FD4CB4F67341C798A3A952D7C6E76B829D382AC5390CCEA38`
|
|
- 411dp light: 442 bytes, SHA-256 `017B882E24150F66362ACF367A5F4DB9EB98E56ED743359B01BDDE68DCF3337D`
|
|
|
|
두 canonical run은 visible Home/Records/Meetings/More 4탭, FAB 열기와 Android Back 닫기, Home 통합 검색의 record/meeting 결과와 각 상세 이동, Records/Meetings/More 도착을 검사했다. 파일명이 run의 viewport/theme를 보존하지만 XML 본문에는 viewport/theme, APK digest/version, Android/API 또는 Maestro version이 내장되지 않으므로 APK identity와 XML 사이를 암호학적으로 묶은 provenance로 읽으면 안 된다. 이전 `*-final.xml` 실패본은 canonical이 아니다.
|
|
|
|
## 상태 판정
|
|
|
|
- `GAP-UX-04`, 모바일 `SHELL-13`, 모바일 `SHELL-14`: `[x]`. 셸 계약과 두 대표 viewport/theme journey가 통과했다.
|
|
- `Q-021`, 모바일 `SHELL-15`: `[~]`. 실제 TalkBack/focus order, font scale, rotation 증거는 없다. 48dp와 theme contrast는 source/Jest 증거다.
|
|
- `GAP-UX-05`, `MEM-15`, `H-016`: `[~]`. 모바일 결과→상세 journey가 두 run에서 통과했어도 검색 구현·성능 계약은 아직 닫히지 않았다.
|
|
|
|
`ScreenHeader`는 새 `UnifiedSearch`와 이번 v4에서 전환한 화면에 적용했다. 모든 역사적 root-stack 화면이 공용 헤더로 전환됐다는 주장은 하지 않는다. 런타임 journey는 세 FAB action 각각의 실제 route, hidden `Record` route의 탭 바 비노출, 48dp geometry도 직접 assertion하지 않으며 이 계약은 Jest와 소스 증거에 의존한다. Maestro 로그의 부수 heartbeat 기록 오류 때문에 이 run을 Q-023의 “로그 오류 0” 증거로도 사용하지 않는다.
|
|
|
|
## 의도적 제거
|
|
|
|
`DashScreen`과 `WorksHubScreen`은 v4 셸에서 제거했다. Home이 dashboard 역할을 맡고, WorksHub의 목적지는 1급 탭과 More에서 계속 접근한다. WorksHub 전용 로컬 도구 검색·고정은 중복 navigation taxonomy와 local ordering state를 줄이기 위해 의도적으로 종료했다. 사용자 기록·회의·도구 콘텐츠를 삭제한 작업은 아니며, 업그레이드 설치에는 사용하지 않는 `works-hub-pins.v1` AsyncStorage 키가 남을 수 있다.
|
|
|
|
## 남은 게이트
|
|
|
|
- 데스크톱 Electron에서 `Ctrl+K`와 record/meeting 결과 이동 수동 검증
|
|
- 별도 `transcripts` segment 검색 설계·구현
|
|
- 모바일 raw-text overfetch 제거와 in-flight request cancellation
|
|
- 양 표면 FTS/index 및 실제 대규모 데이터 성능 기준·측정
|
|
- TalkBack/focus order, font scale, rotation 실기기 검증
|
|
- production Firebase/CI secret, signed AAB, Play track, Fold6 Play-installed artifact 검증
|