| name | gt-qa |
| description | Integrated game-translation QA after text and conditional image review-ready handoffs: verify font coverage, structure, build, session ownership, emulator/runtime behavior, and logs/screenshots with fail-closed bench-versus-runtime evidence. Use for final patch QA, emulator testing, emucap evidence, or device verification. |
gt-qa — 통합 QA
텍스트·폰트·이미지 브랜치의 review_ready 후보를 깨끗한 원본에서 통합하고, 정적/bench
검증과 실제 실행 증거를 분리해 기록한다. review-ready는 사용자 승인이나 런타임 PASS가
아니며, 프로젝트 정책이 user-gate일 때만 해당 승인 증거를 추가로 요구한다.
입력 조건
시작 전 PROJECT.md, WORK_LOG.md, HANDOFF.md, 현재 manifest·staging hash와
pipeline-contract.json을 읽는다. 계약을 증명하지 못하면 PROJECT.md에 BLOCKED를 기록한다.
text_status=review_ready, text_review_approval=not_required|approved,
font_status=verified, 30_translation/text/reviews/TEXT_REVIEW_HANDOFF.md
image_scope=required이면 image_status=review_ready,
image_review_approval=not_required|approved,
30_translation/image_translation/reports/IMAGE_REVIEW_HANDOFF.md와
이미지 build manifest. image_scope=N/A이면 0건 inventory와 image_status=skipped
- 현재 text/image candidate·manifest·hash, target language slot, platform/engine 계약
$GT_HOME/common/preflight-checks.md, qa-session-rules.md,
release-runtime-contract.md, platforms/<platform>/runtime-emulators.json,
emucap-integration.md(사용 시), 플랫폼 build-test, 엔진 문서
text_review_policy=user-gate 또는 image_review_policy=user-gate이면 각 시트 전 행과
PROJECT 명시 승인 기록
입력 해시·Title ID·staging·세션이 다른 증거와 섞이면 BLOCKED다. 통합 후보를 만들기
전에 사용자 승인 여부를 추측하지 않는다.
절차
- 소유권·세션 preflight: literal 프로젝트 루트·Title ID·입력 파일·canonical
staging을 inventory한다. Eden-MCP와 Ryubing-MCP의 같은 Title ID inventory를 모두
SESSION.json과 비교하고 두 backend를 합쳐 live 세션이 하나인지 확인한다. active 세션의
key가 다르거나 pending/소유권 불명/복수 live 상태이면 새 세션을 만들지 않는다. eden 아래의
sessions/, runs/, session-*, run-*, SESSION-2.json, (1)·copy 산출물을
발견하면 먼저 정리 계획을 만들고 QA를 중단한다.
- 정책 게이트: review policy가
user-gate이면 approval 필드가 approved이고 승인
시각·시트 hash·전 행이 일치하는지 검증한다. prepare-only이면 approval이
not_required이고 review handoff의 준비 증거만 요구해 자동 진행한다.
어느 정책에서도 review_ready를 runtime PASS로 승격하지 않는다.
- 깨끗한 통합: 깨끗한 원본에서 승인/준비된 text·font·조건부 image를 한 번만
재삽입한다. 기존 통합 트리나 이전 ZIP을 다시 패치하지 않으며
artifact_key와
canonical 경로를 먼저 예약한다.
- 폰트 재검증: 최종 통합 입력의 전체 가시 코드포인트를 다시 추출하고
FONT_ATLAS_MANIFEST.tsv·coverage·render probe hash와 대조한다. 실제 consumer에서
한글·작은 글자·루비·active/inactive·행간·baseline·advance를 확인한다. mismatch면
font_status=blocked로 되돌리고 텍스트 QA부터 재실행한다.
- 정적 무결성: 파일 수·구조·magic·컨테이너 parser·placeholder/control token·
language slot·변경/비대상 diff·입출력 SHA-256을 전수 검사한다. 종료 코드 0이나
로더 생존만으로 PASS하지 않는다.
- 빌드: 플랫폼 어댑터의 deterministic build를 실행해
40_build/와
BUILD_MANIFEST.tsv를 만든다. stale 파일·다른 Title ID·중복 output·source overwrite가
있으면 실패시킨다.
- 플랫폼 기본 smoke:
runtime_policy=static-first이면 사용자의 명시적 실행 요청 전에는
bench와 PENDING_RUNTIME만 기록한다. NSW는 Eden-MCP, Steam/PC는 설치 게임 EXE의
direct-native 실행을 사용한다.
- NSW는
project:qa-session에 양쪽 inventory 조회를 명시하고 같은 Title 세션을 재사용한다.
Ryubing-MCP나 두 번째 세션은 구체적 예외 사유, 이전 exact close 증거가 있어야 한다.
- create/launch 오류 뒤 양쪽 목록/status를 다시 읽기 전 재호출하지 않는다. 빌드 변경은
새 세션이 아니라 같은 세션에서 title restart로 반영한다.
- Steam/PC는 MCP 세션을 만들지 않고 현재 distribution build ID·game EXE hash·active patch를
기록한다. 기본 smoke만으로 최종
PASS (runtime)로 승격하지 않는다.
- MCP 결과는
PASS (mcp-smoke)로만 기록하며 최종 QA 또는 PASS (runtime)로 승격하지 않는다.
- 공식 배포 릴리즈 최종 QA:
qa_status=passed 또는 릴리스로 진행하려면
를 반드시 실행한다.
산출물
40_build/의 deterministic 통합 후보와 BUILD_MANIFEST.tsv
50_test/logs/, 50_test/screenshots/, TEST_LOG.md
50_test/eden/SESSION.json, ARTIFACT_MANIFEST.tsv(프로젝트당 하나)
50_test/RELEASE_RUNTIME_QA.json, 50_test/release-runtime/ACTIVE_MOD_MANIFEST.tsv
30_translation/QA_REPORT.md 또는 프로젝트가 지정한 canonical QA report
- 폰트·텍스트·이미지 manifest hash와 runtime 증거
완료 기준
통과 시 gt-release로 진행한다.