fix: restore legacy playout parity and live startup

This commit is contained in:
2026-07-29 14:07:36 +09:00
parent 80b50c80b3
commit b35c000796
31 changed files with 3356 additions and 382 deletions

View File

@@ -39,15 +39,22 @@ SHA-256을 이 PC의 최초 기준으로 자동 고정한다. 이후 DLL이나
담당자 두 사람이 다음 내용을 먼저 확인한다.
1. 이 PC와 로컬 Tornado2/PGM은 개발용이며 실제 방송 라우팅에 영향이 없다.
2. `Tornado2*` 프로세스는 정확히 하나이고 주 창 제목은 승인값과 정확히 일치한다.
3. Tornado2의 `Tools > Option > Control > Network Server > TCP Port`가 지정 개발 환경의
회사 기본값 `30001`인지 확인한다. 다른 값이면 자동 첫 실행 설정을 사용하지 않는다.
4. 해당 TCP LISTEN 소유 PID와 Tornado2 PID가 같고, 실행 도중 프로세스 세대가 바뀌지 않는다.
1. 이 PC와 `127.0.0.1:30001` K3D/PGM 대상은 개발용이며 실제 방송 라우팅에 영향이 없다.
2. 일반 Development Live 앱은 Tornado2 프로세스가 없어도 K3D가 해당 endpoint에서
`OnHello`를 반환하면 연결할 수 있다. 앱은 `OnHello` 확인 전까지 명령을 차단해야 한다.
3. Tornado2 프로세스가 이미 있으면 정확히 하나여야 하고, 프로세스·창 검사가 모두 성공해
주 창이 `PGM`/`PROGRAM`으로 식별되어야 한다. 다른 창이거나 둘 이상이거나 실행 도중
프로세스가 새로 나타나거나 세대가 바뀌면 앱은 기존 연결의 명령을 차단해야 한다.
4. Network Server TCP Port는 지정 개발 환경의 회사 기본값 `30001`이어야 한다. 다른 값이면
자동 첫 실행 설정을 사용하지 않는다.
5. `View > Network Monitoring Window`와 PGM 화면을 동시에 관찰할 담당자가 있다.
한 항목이라도 불명확하면 이후 명령을 보내지 않는다.
`Tornado2*` 프로세스 정확히 하나와 TCP LISTEN 소유 PID 일치는 아래 Gate A 또는
connect-only 진단을 실행할 때 적용하는 추가 조건이다. 일반 Development Live의
0-process + K3D `OnHello` 경로에 이 PID 조건을 적용하지 않는다.
## 2. 기존 자산 보유 PC: clone 후 1회 초기화
상사 PC처럼 승인된 자산과 벤더 설치가 이미 있는 경우에는 이 흐름을 우선 사용한다. 별도
@@ -358,7 +365,17 @@ powershell -NoProfile -ExecutionPolicy Bypass `
| `testSceneAllowlist` | 아래 active alias 45개만 허용 |
| `trustedLiveOutputEnabled` | `true` |
| `reconnectEnabled` / `maximumReconnectAttempts` | 인수 회차에서는 `false` / `0` |
| `maximumAutomaticRefreshesPerTakeIn` | 최초 인수 회차에서는 `0` |
| `maximumAutomaticRefreshesPerTakeIn` | `null`. 원본처럼 TAKE IN 뒤 3초 간격 자동 갱신을 계속한다. |
이전 초기화 도구가 만든 `maximumAutomaticRefreshesPerTakeIn: 0` 프로필은 자동 갱신을
완전히 끄므로 현재 일반 Development Live 계약과 일치하지 않는다. 기존 파일을 앱이
묵시적으로 수정하지는 않는다. 첫 설정 창에서 다시 설정한 뒤
`기존 Live 설정 교체 후 다시 시도`를 한 번 실행하거나,
`Initialize-ExistingDevelopmentPc.ps1`을 사용하는 검토된 수동 초기화 명령에
`-ReplaceLiveConfig`를 명시한다. `Initialize-DevelopmentLiveConfig.ps1`을 직접
사용하는 경우의 동등한 명시 옵션은 `-Force`이다. 이 절차는 기존 Live 승인 파일을 먼저 무효화하고
`playout.local.json` 검증이 끝난 뒤 승인을 다시 발급한다. Gate A 검증 프로필의
명시적 `0` 상한은 별도 안전 계약이므로 변경하지 않는다.
```text
5001, 5006, 5011, 5016, 50160, 5023, 5024, 5025, 5026, 5029,
@@ -409,6 +426,8 @@ strict 파일 규칙은
Network Monitoring을 먼저 연다. 독립 승인 해시는 이 진단을 실행할 현재 PowerShell
프로세스에만 설정한 뒤 실제 port로 connect-only 진단을 한 번 실행한다.
이 진단은 0-process 경로가 아니다. `Tornado2*` 프로세스가 정확히 하나이고 해당
`127.0.0.1:30001` TCP LISTEN 소유 PID가 그 Tornado2 PID와 같은 경우에만 실행한다.
```powershell
$env:MBN_STOCK_K3D_NATIVE_SHA256 = '<independently-approved-native-sha256>'

View File

@@ -151,6 +151,15 @@ Studio의 시작 드롭다운에는 다음 프로필 하나만 표시된다.
기존 이중 게이트를 유지하기 위해 로컬 설정에는 `trustedLiveOutputEnabled: true`
명시되어야 한다.
일반 Development Live의 `maximumAutomaticRefreshesPerTakeIn``null`이어야 한다.
이는 기존 프로그램처럼 TAKE IN 뒤 3초 간격 자동 갱신을 계속한다는 뜻이다. 이전
초기화 도구가 만든 값 `0`은 자동 갱신을 끄므로 새 strict 계약에서 거부된다. 앱이
보호된 파일을 자동 수정하지는 않으며, 첫 설정 창의
`기존 Live 설정 교체 후 다시 시도` 또는 검토된
`Initialize-ExistingDevelopmentPc.ps1 -ReplaceLiveConfig` 절차로 한 번 교체해야 한다.
교체 과정은 기존 Live 승인을 먼저 무효화한 뒤 새 설정 검증과 승인 재발급을 마친다.
Gate A 검증 설정의 `0`은 의도적인 회차 안전 상한이므로 유지한다.
실제 cue의 `PlayoutCue.SceneName`은 builder의 대표 SceneCode가 아니라 활성 cut alias다.
전체 이관 UI를 개발 PGM에서 검증할 때 `testSceneAllowlist`에는
`LegacySceneRuntimeCoverage.ExpectedCutCodes`와 동일한 다음 45개 alias를 사용한다.