# R5 Runtime 통합과 Web 호환

- 시각: 2026-10-31 10:31:26 KST. Profile: ltb1021.
- 상태: 사용자 승인 범위 구현·격리 검증, 운영 전환 미승인/미실행.
- 분류: A. ID: `R5-CONFIG-01`, `R5-RUNTIME-01`, `R5-DISPLAY-01`.
- Extends: [FIGHT-CROWD-WIRE-01](20260920T231430+0900-decision-fight-crowd-wire.md).
- 근거: [고정 R5 검토](../run/20261030T215846+0900-run-r5-space-review.md)와 이번 사용자 구현 요청. 샘플 기반 시연 후보 수용은 라이브 일반화 보장이 아니다.

## 결정과 이유

| ID | 결정 | 이유·경계 |
| --- | --- | --- |
| R5-RUNTIME-01 | private `fight.engine=legacy/r5`, 미지정은 legacy. 고정 R5만 이식 | 운영 기본값 자동 변경 없이 선택·복귀 가능. 두 엔진을 함께 실행하지 않음 |
| R5-CONFIG-01 | 기존 `parameters` 안의 `fight_r5.schema_version=1`; 새 블록은 엔진 전환 권한이 아님 | 구형 Web 호환과 향후 조절을 분리. legacy에서는 명시적 새 블록을 거부 |
| R5-CONFIG-01 | 구형4개 동작 필드 무시·로그, 생략은 저장값 유지, 명시적 초기화만 기본값 복귀 | 재전송으로 새 설정이 사라지거나 의미가 몰래 변하는 것을 방지 |
| R5-CONFIG-01 | 유효한 공통 score만 사람0.25/관절0.10 하한 보정. 잘못된 새 설정은 atomic 거부 | 다른 시나리오/공유 provider를 제한하지 않고, 보정과 오류를 구분 |
| R5-DISPLAY-01 | 현재 기여/확인된1초 표시 유지 객체는 기존 빨강. 내부 현재 조건·유지·Event는 분리 | Web 패치 없이 시연 표시. 유지나 cooldown으로 근거/판정을 바꾸지 않음 |
| R5-DISPLAY-01 | 현재 실제 객체 참조만 사용, null Tracking ID 유지, 공간 가짜 객체/새 schema 없음 | 기존 Redis/Event 경로와 미관측 안전성 유지 |

R5 계산은 실제 PTS·ROI별 상태·현재 Pose를 사용한다. run/source/config/해상도 경계는 clear 또는 새 engine이 필요하며, 누락은 동작 이력과 표시 연결을 끊는다. 누락을 quiet나 행동 근거로 채우지 않는다.

외부 cooldown은 R5 내부 episode Event의 최종 admission만 제한한다. 내부 Event가 거부돼도 현재 판정/빨강은 유지되며, 거부된 Event를 지연 재전송하지 않는다. 다음 재무장 episode가 필요하다.

## 적용·보류

- 구현: `app/fight_r5/` 및 기존4개 얇은 연결 지점. R4/ApproachLink·추가 규칙·threshold 탐색 없음.
- 상세 공개 계약: [Web 명세](../../../../../integration/FIGHT_R5_WEB_CONFIG.ko.md).
- 검증·배포/복귀 준비: [실행 기록](../run/20261031T103126+0900-run-fight-r5-runtime-integration.md).
- 기존 컨테이너·설정 기본값은 변경하지 않는다. 운영 소스 버전 차이 때문에 단순 파일 덮어쓰기를 배포 절차로 승인하지 않는다.
- 실제 Web 소비/미디어·라이브10FPS·장시간 품질·운영 전환은 별도 승인 후 확인한다.
