Add atomic composition controls and representative stages
This commit is contained in:
@@ -21,3 +21,6 @@
|
||||
| count_01 | `13A882CE1620140D447635E14F2D4758045D5E348960C17386DF1C720050C100` |
|
||||
| guide_collect | `62E15C9E38C36F4094A6C7E9C5148510141290B5F41DB5AAD9DC1D8F1A158594` |
|
||||
| guide_count | `DEBE29B89F3E2856F2BF4C5E01707A5F0A0657E5768C03BE385EC88FA2328B40` |
|
||||
# Composition 시제품 추가
|
||||
|
||||
Stage06/10/14 ScriptableObject와 GameApp의 대표 선택·나누기·취소 버튼은 `CompositionAssets.Build`가 Editor API로 생성/연결한다. GroupBadge에 묶음당 리본 망토 하나, BallView에 접촉 대상·선택 구의 색 표시를 연결했다. 구의 크기/경계와 기존 얼굴·숫자 시제품을 유지한다. 정적 한글 글꼴에 새 안내/버튼의 글자를 추가했다. 전체 AI 외형·최종 표정은 후속 단계다. 새 음성 3개는 아래 Qwen 등록 문서의 초안이며 기존 승인 파일은 그대로 유지한다.
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# 합체·분리 대표 단계
|
||||
|
||||
실제 `Stage06/10/14.asset`은 각각 `[1,1] → [2]`, `[2] → [1,1]`, `[3,1] → [2,2]`다. GameApp 프리팹의 선택 버튼은 저장된 진행에 따른 기존 순차 해금을 사용한다. 새 저장에서는 6·10·14가 잠겨 있다. 중간 카탈로그에는 1·6·10·14만 있으며 전체 30단계는 후속 제작 범위다.
|
||||
|
||||
친구를 끌어 다른 묶음에 가까이 놓으면 가장 가까운 두 구의 접촉 위치에 붙는다. 대상 구의 초록색 미리보기는 저장하지 않는다. 각 구의 크기와 ID는 유지하고, 각 묶음에 숫자·대표 얼굴·얇은 리본 망토 하나씩을 표시한다. 숫자는 카메라 위쪽으로 묶음 전체 구의 투영 경계보다 높게 놓는다.
|
||||
|
||||
친구를 탭해 선택하고 **나누기**를 누른 뒤 구를 탭해 선택/해제한다. 선택 구를 끌어내면 선택과 나머지가 각각 하나의 친구로 모인다. 떨어진 선택도 허용한다. 0개·전체 선택은 상태·저장을 바꾸지 않는다. 선택 중 다른 친구를 탭하면 이전 선택을 해제한다. 핀치·터치 취소·영역 밖 해제·화면 전환은 미확정 이동과 선택 표시를 정리한다. 분리 확정 자체에서는 합체를 검사하지 않아 즉시 재합체하지 않는다. 다시 끌어 놓으면 합체할 수 있다.
|
||||
|
||||
`GameSession.MoveAndMerge`는 목적 그룹·모든 이동 좌표를 검증한 뒤 이동과 소속을 한 조작으로 확정한다. `SplitAndMove`는 전체 분리 배치를 먼저 계산/검증한 뒤 소속과 좌표를 확정한다. 두 API 모두 완료 판정과 저장 호출은 한 번이다. 선택·접촉·미리보기는 JSON v1에 추가하지 않는다. 14번은 조작 이력 대신 확정된 전체 묶음의 개수 `[2,2]`만 비교한다.
|
||||
|
||||
`CompositionAssets.Build`는 Editor API로 대표 정의·프리팹·정적 한글 글꼴·초안 음성을 연결한다. 공유 Main 씬은 수정하지 않는다. Main의 기존 GameApp 프리팹 인스턴스가 새 연결을 상속한다. 최종 외형, 6표정, 전체 시범은 후속 제작 범위다.
|
||||
|
||||
검증 명령:
|
||||
|
||||
```powershell
|
||||
pwsh -NoProfile -File tools/verify.ps1 -Phase EditMode -Milestone Composition
|
||||
pwsh -NoProfile -File tools/verify.ps1 -Phase PlayMode -Milestone Composition
|
||||
pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidBuild -Milestone Composition
|
||||
pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Composition
|
||||
```
|
||||
|
||||
근거는 `artifacts/verification/Composition/`에 XML·명령/종료 코드·실제 source SHA/dirty·APK SHA·AVD serial·PNG·JSON 전후 쌍·실제 PCM으로 남긴다. 최초 RED는 도메인 72개 중 5개 실패(API 부재), PlayMode 28개 중 2개 실패(네이티브 취소/같은 프레임 핀치 뒤 선택광 잔존)였으며 `red-*` 파일에 보존한다. 기존 FirstSlice 25개 PlayMode 테스트는 변경하지 않았다. 새 음성의 기계 검사와 사람 청취 승인은 별개다.
|
||||
|
||||
Android 대표 검사는 앱 데이터에 정상적인 완료 1..5/1..9/1..13 진행 fixture만 쓴다. 제품에 직접 단계 실행 서버나 디버그 해금을 넣지 않는다. 에뮬레이터 결과는 실제 모바일 하드웨어 성능 판정이 아니다.
|
||||
|
||||
효과음 요청은 [audio-requests.md](audio-requests.md)의 `sfx_merge`, `sfx_split_select`, `sfx_split`를 사용한다. 사용자 요청에 따라 음원 선정·생성은 기다리며 현재 동작은 음성 안내와 무음 효과로 검사한다.
|
||||
@@ -89,3 +89,18 @@ sidecar 전환 당시 `input-snapshot-migration.json`의 네 `runs[].originalMan
|
||||
변경 전 원본 환경의 device만 `CORRUPTED_DEVICE_RECORD`로 바꾼 검사 복사본은 실제 `--validate-only`가 종료 0을 반환하는 결함을 재현했습니다. 두 새 회귀 검사는 RED 종료 1이었습니다. 보완 후 같은 검사 복사본의 실제 CLI는 원본 manifest SHA 불일치를 기록하고 종료 1을 반환했습니다. 원본 자료 다섯 회차는 각각 기록된 생성 범위를 검증하여 모두 종료 0이었고 전체 Python 18개 검사가 통과했습니다. 모델 loader와 장치 명령은 차단했고 torch·qwen_tts·huggingface_hub가 import되지 않았음을 기록했습니다. 실제 원본 manifest·입력·WAV·승인 이력은 변경하거나 재생성하지 않았습니다.
|
||||
|
||||
증거는 `artifacts/verification/FirstSlice/Voice/OriginIntegrity/`의 `red-tests.log`, `red-cli-proof.json` 및 `.log`, `green-tests.log`, `green-cli-proof.json` 및 `.log`에 있습니다.
|
||||
# Composition 새 안내 초안
|
||||
|
||||
`guide_merge`("친구를 가까이 끌어와 붙여 볼까?", 3.600초), `guide_split`("나누기를 누르고, 나눌 구를 골라 끌어내 보자.", 5.360초), `demo_composition`(9.520초)을 로컬 RTX4080 SUPER에서 같은 고정 Qwen3-TTS 1.7B CustomVoice revision/한국어 Sohee/seed42/bfloat16/sdpa/batch1로 생성했다. 시범 대본의 마지막 "둘과 둘을 만들어 보자"는 14번에서만 사용하므로 현재 카탈로그 stageIds는 `[14]`다. 6·10의 목표별 시범은 후속 제작 범위다.
|
||||
|
||||
생성 원본과 고정 입력 스냅샷은 `SourceAssets/Audio/Voice/generated/20261004T193323396066Z_c5daf2df/`에 있다. 14번 메타데이터 범위 수정은 원음 byte를 유지해 `20261004T194102211708Z_8c81e83d` reuse provenance로 기록했다. 대응 `edited/.../selection.json`은 모든 후보를 `not_listened`/`draft`로 분류한다. 생성·검증·prepare는 exit0, 오류0이다. 리샘플링만으로 PCM16 mono44.1kHz runtime WAV를 만들었고 말 줄이기·숫자 후보 수리는 하지 않았다. 사람 청취 승인 상태는 root가 별도로 관리한다.
|
||||
|
||||
runtime SHA256:
|
||||
|
||||
| ID | SHA256 |
|
||||
|---|---|
|
||||
| guide_merge | 522db037e0358b01b84dfc68f13e62073495a011a96d8ca407be28f36e98e16d |
|
||||
| guide_split | 72df6edc53a6e320e48b6bae18ba6bed43034028795021ff48d6f04bc4dc7649 |
|
||||
| demo_composition | 570452e9fa15ec545b126cd8bdba504a3db6f30b74a95405ee228015368761e7 |
|
||||
|
||||
기존 승인 count01/guide_collect/guide_count는 동일 byte이며 기존 생성·승인·라이선스 기록은 변경하지 않았다. 새 후보에도 같은 로컬 모델/코드 라이선스가 적용된다. 효과음·음악은 생성하지 않았다.
|
||||
|
||||
Reference in New Issue
Block a user