39 lines
7.1 KiB
Markdown
39 lines
7.1 KiB
Markdown
# 구현과 검사에서 확인한 문제
|
|
|
|
## 입력 대상과 가려진 구
|
|
|
|
- 모바일 회전 검사에서 시작 화면으로 튀는 현상은 투영 좌표가 UI 영역에 들어가 버튼을 누른 경우였다. 구 위치와 카메라만 보고 탭하지 말고 현재 화면의 UI 안전 영역과 앞쪽 구를 먼저 확인한다. 화면 밖이면 실제 핀치·빈 공간 회전으로 시점을 바꾼 뒤 다시 투영한다.
|
|
- 마지막 구의 계수가 수십 번 실패해도 구 ID가 남아 있을 수 있다. 구름 아치 뒤의 구를 좌우 회전만 반복해 찾지 못한 실제 사례는 상하 회전 한 번으로 해결됐다. 시점 탐색에 두 회전 방향을 사용하고 변경 전후 같은 구·위치를 대조한다. 모든 구가 한 시점에 보여야 한다는 조건을 추가하면 자유로운 3D 배치와 충돌한다.
|
|
- 화면의 ‘나누기’와 ‘취소’ 버튼을 위치만으로 구분하면 분리 모드에 들어가지 않은 채 구를 누를 수 있다. 고정 AVD에서 확인한 실제 라벨과 캡처로 상태를 확인하고 일반 모드·선택 모드의 부정 대조군도 함께 확인한다. 이 픽셀 판정은 다른 해상도에 그대로 적용할 수 없다.
|
|
- 소품에 가려진 선택은 요청한 ID와 다른 구를 누를 수 있다. 이미 목표 2+3으로 완료된 실제 상태를 다시 합치려 하면 미완료 보드가 없어 실패한다. 현재 화면·전체 ID·목표 구성으로 실제 완료를 확인하고, 요청 ID와의 일치가 검증되지 않았다는 사실은 그대로 기록한다. 정확한 선택 경계 검사는 별도 구성이 필요하다.
|
|
|
|
## 저장 관찰과 PowerShell
|
|
|
|
- 숫자 마지막 입력 직후 파일을 읽으면 계수가 9인 이전 저장이 보이고 수십 ms 뒤 자유 놀이 상태가 보일 수 있다. 즉시 읽기 한 번으로 실패 판정하지 말고 짧은 한도 안에서 실제 저장을 반복 관찰하며 각 JSON과 UTC를 보존한다. 마지막 발화가 끝난 뒤까지 기다리면 ‘성공이 소리 완료를 기다리지 않는다’는 조건을 검증할 수 없다.
|
|
- 구 ID 하나를 PowerShell scalar 문자열로 받은 뒤 `[0]`을 적용하면 첫 문자만 전달된다. 네이티브 입력에 ID 배열이 필요한 경계에서는 `@(...)`로 감싸고 투영 전에 해당 ID가 실제 보드에 정확히 하나 존재하는지 확인한다.
|
|
- PowerShell AST 파싱 성공은 named argument나 실제 데이터의 의미를 보장하지 않는다. `Where-Object`의 연산자와 인수를 분리해 쓰고 동일 실제 상태로 호출까지 확인한다.
|
|
- 퍼즐 DTO에는 수집·계수 목록이 있지만 자유 놀이 DTO에는 없다. 빠른 계수 시험을 자유 놀이 저장에 계수 필드를 붙여 준비하면 퍼즐 준비가 되지 않는다. 실제 완료·수집 원문에서 출처를 남기고 별도의 퍼즐 상태를 준비한다. 이러한 주입은 정상 순차 진행 증거가 아니다.
|
|
|
|
## 음성과 APK 증거
|
|
|
|
- incremental Unity BuildReport의 packed-assets 목록이 비어 있어도 실제 APK에 음성이 들어 있을 수 있다. 이번 빌드의 직렬화 파일을 풀어 AudioClip과 실제 PCM을 확인한다. `.split0..N` 파일은 이어 붙여 읽고 다른 빌드의 UUID 결과를 재사용하지 않는다.
|
|
- 같은 제품 소스라도 다른 디렉터리에서 만든 APK의 SHA가 달랐다. 검사에 사용한 빌드·표준 사본·설치 후 가져온 APK는 해당 실행의 실제 해시로 연결한다. 이전 빌드 파일 이름이나 소스 동일성만으로 바이트 동일성을 주장하지 않는다.
|
|
- 짧은 파형 일부의 높은 상관은 전체 숫자가 잘리지 않았다는 증거가 아니다. 전체 발화 비교와 순서·중복·꼬리 무음을 함께 보고 앞/뒤/중간 잘림·중복·잡음·다른 발화 대조군이 실제 거부되는지 확인한다. PCM 검사도 발음에 대한 사용자 청취 승인을 대신하지 않는다.
|
|
- 녹음 완료 뒤 PID로 프로세스를 다시 찾으면 재사용된 브라우저 PID를 기다릴 수 있다. 준비 시 확인한 이름·시작 시각과 원래 process handle을 유지하고 자기 녹음 프로세스의 종료만 기다린다. 무관한 브라우저를 종료해 해결하지 않는다.
|
|
- JSON에서 UTC 시각이 이미 DateTime으로 읽혔는데 다시 지역 문자열로 변환·파싱하면 Kind가 사라질 수 있다. 원래 UTC 값을 직접 사용하고 녹음·성공 관찰의 시간 순서를 원문으로 확인한다.
|
|
- ADB daemon 재시작은 이전 파이프를 물려받아 wrapper를 붙잡을 수 있다. 분리된 숨김 프로세스로 실행하고 실제 device·boot 상태를 확인한 뒤 앱 검사를 시작한다. 오프라인 전환과 녹음 후에는 speaker·remote_submix·default 세 음량 및 네트워크 상태 모두를 원래 값으로 복원한다.
|
|
|
|
## Unity 자산
|
|
|
|
- 배치 Edit/Play 검사에서 URP의 Editor 생성 runtime 참조 목록이 비워지고 설정이 LF로 재작성됐다. 검사 전 Git 원문과 다른 모든 바이트가 같고 알려진 목록 변환만 존재하는지 확인한 경우에만 정리했다. 실제 설정 변경을 같은 처리로 숨기면 안 된다.
|
|
- Blender FBX의 root 회전을 제거하면 배경 소품이 눕는다. 제작 원본은 m·Z-up이고 내보내기는 -Z forward·Y-up이다. Unity import scale 1과 bakeAxisConversion을 맞추고 프리팹 wrapper에서 import root 회전을 유지한 뒤 바닥 피벗을 실제 화면에서 확인한다.
|
|
- 아치 전체를 BoxCollider로 감싸면 보이는 구멍도 Raycast를 막는다. 실제 아치 메시의 MeshCollider로 구멍을 보존하고 뒤쪽 자석을 선택할 수 있는지 확인한다.
|
|
- 투명 얼굴 PNG는 일부 뷰어에서 alpha 0 픽셀의 RGB가 파란 배경처럼 보인다. 원본 alpha와 실제 Unity 구 표면의 가장자리를 함께 확인한다. 현재 v2는 도구 편집 결과 자체를 채택했고 별도 래스터 변환 없이 런타임 파일과 같은 바이트를 유지한다.
|
|
- 글꼴 이름의 `FirstSlice`는 과거 이름이며 현재 전체 한국어를 포함한다. 이름만 보고 다시 만들면 승인된 화면과 자산 GUID가 달라질 수 있다. 실제 glyph와 static atlas를 검사하고 새 문구의 누락만 보완한다.
|
|
|
|
## 제작 도구의 수명
|
|
|
|
초기 자산 builder는 현재 완성된 씬·스테이지·얼굴·음성 참조를 재작성할 수 있다. `ProjectBootstrap.Prepare/ConnectApp`, `CompositionAssets.Build`, `PersistenceAssets.Build`, `ContentAssets.Build`, `PresentationAssets.Build`를 정상 프로젝트 열기·검사 전 준비 작업으로 실행하지 않는다. 변경 대상과 생성 diff를 먼저 확인하고 승인된 기존 자산을 보존할 수 있을 때만 사용한다.
|
|
|
|
로컬 Qwen 환경의 설치·import, GPU 연산, 모델 로딩, 실제 생성, 파일 검수, 청취 승인은 각각 다른 확인이었다. 이미 승인된 44개는 재생성할 이유가 없으며 같은 seed가 다른 환경에서 같은 WAV 바이트를 보장하지 않는다. 새 후보는 원본 이력과 입력 snapshot을 유지하고 승인 파일과 혼합하지 않는다.
|