# [과거 기록] Cuts/Res 실행 구조 검증 (2026-07-18)

> 이 문서는 2026-07-18 당시 빌드와 패키지를 검증한 역사적 증거이며 현행 배치 계약이 아니다.
> 현재 Debug/Release 출력, 게시와 MSIX에는 `MmoneyCoder.ini`를 포함하지 않는다. 현행 앱은
> 첫 실행에서 선택한 원본을
> `%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Res\MmoneyCoder.ini` 사용자 전용 overlay로만 복사한다.
> 최신 계약은 [원본 Cuts/Res 런타임 배치](LEGACY_RUNTIME_ASSETS.md)를 따른다.

## 적용 결과

읽기 전용 원본은 다음 개발 출력이다.

```text
C:\Users\MD\source\repos\MBN_STOCK_N\MBN_STOCK_N\bin\Debug
```

당시 `LegacyParityApp`은 이 위치의 `Cuts`와 허용된 `Res`를 빌드 입력으로 연결했다. 당시
일반 Visual Studio Debug 출력에는 실제 DB용 `Res\MmoneyCoder.ini`도 실행 파일 옆에
복사했지만, 이 동작은 이후 폐기되었다. 현행 빌드는 위 안내처럼 DB INI를 어떤 빌드
출력에도 넣지 않는다. 원본 저장소의 기존 수정 파일은 변경하지 않았다.

## 자산 무결성

| 대상 | 결과 |
|---|---:|
| 원본 `Cuts` | 179개 / 222,825,612 bytes |
| Debug 실행 출력 `Cuts` | 179개, 원본과 파일별 경로·크기·SHA-256 일치 |
| Release MSIX `Cuts` | 179개 / 222,825,612 bytes, 원본과 파일별 경로·크기·SHA-256 일치 |
| Release MSIX `Res` | 허용 목록 34개 / 2,920,725 bytes, 원본과 파일별 크기·SHA-256 일치 |
| 당시 Debug 실행 출력 `Res` | UI용 34개 + DB INI 1개(현행 계약에서는 DB INI 제외) |
| 필수 장면 | `Cuts\5001.t2s` 포함 |

Release x64 개발 MSIX 결과는 다음과 같다.

| 항목 | 값 |
|---|---|
| 패키지 | `MBN_STOCK_WEBVIEW.LegacyParityApp_0.1.0.0_x64.msix` |
| 크기 | 61,239,787 bytes |
| SHA-256 | `CDCC7C2FB9DA66A631473025C187B427FF84E073EB6F174D819DE327E58BAF7B` |
| 전체 파일 | 291개 |
| 빌드 | clean Release x64, 경고 0 / 오류 0 |

패키지, `build.appxrecipe`, `package.map.txt`, layout resfiles와 Release 실행
레이아웃에서 `MmoneyCoder.ini`, 복사본, `.bak`, 압축본, `afiedt`, 인증서·개인키·라이선스
파일과 K3D 벤더 파일은 모두 0건이다. 설치된 SDK 10.0.19041의 `MakeAppx`에는
`validate` 명령이 없어 해당 부가 명령은 사용할 수 없었고, 패키지 생성·BlockMap 및
파일별 payload 감사와는 별개다.

당시 추가 감사에서 일반 출력의 DB INI가 `Clean` 뒤 남을 가능성과 패키지 빌드가 불필요하게
원본 DB INI를 요구하는 문제를 발견해 보완했다. 이 문단의 “일반 빌드”는 2026-07-18 회차를
가리킨다. 현행 일반 빌드는 DB INI를 출력에 복사하지 않으며, MSIX 생성·게시 경로도 원본 DB
INI를 포함하지 않는다.

## 런타임 검증

- 실제 원본 UI INI를 사용한 조합 검사: 경고 0
- 해외/환율/지수 항목: 78/46/204개와 section·row 순서 일치
- 업종 코스피/코스닥: 각각 22개와 순서 일치
- 종목비교: 고정 대상 24개 + action 9개 일치
- 실제 원본 DB INI 파싱과 Oracle/MariaDB read-only smoke 통과
- 필수 scene selector 33/33 및 전체 query 58개 통과
- Debug x64 .NET 테스트: 2,760/2,760 통과
- Release x64 .NET 테스트: 2,760/2,760 통과
- Visual Studio 18.7.4(Visual Studio 2026) MSBuild로 LegacyParityApp Debug/Release x64 빌드 통과
- Legacy Web shell 테스트: 34/34 통과
- Web playout 테스트: 422/422 통과, scene catalog 35개와 cut coverage fixture 통과
- Release package-context UI-only smoke: `PASS`, `DRY RUN`, input/DB intent/native playout
  intent 0, Tornado 연결 0, 정상 종료 후 잔류 앱 프로세스 0
- Release package-context 실제 입력 smoke: `PASS`; `삼성` 검색에서 23개 결과를 표시하고
  `삼성출판사`의 1열판 기본 3개 컷을 플레이리스트에 구성했다. 컷/플레이리스트 키보드,
  단일·다중 드래그, 실제 Windows row-header drag와 이름 있는 플레이리스트 대화상자를
  포함한 12개 checkpoint가 통과했다. DB write와 playout intent는 0건이었다.

UI-only와 실제 입력 증거는 Git 제외 경로 `artifacts\package-ui-only-smoke` 및
`artifacts\package-input-smoke`에 JSON과 화면 캡처로 남긴다. 이 검증은 Release 기본
`DryRun`을 확인한 것이며 실제 Tornado2/PGM 명령을 보내지 않았다.

## 남아 있는 원본 자산 전제조건

현재 원본 `Cuts\Video`가 비어 있어 `s5006`의 큐브 배경 1개와 `s6001` 국가별 영상
13개는 이 배치만으로 제공되지 않는다. 일부 기본/스튜디오 `.vrv` 배경도 원본 제작
자산이 필요하다. 임의 파일로 대체하지 않으며 제공 전까지 해당 자산을 요구하는 action의
preflight만 명시적으로 차단해야 한다. `s6001`의 영상 비의존 두바이유·WTI·브렌트유·금
4 action은 별도 최신 회차에서 실제 PGM 검증을 완료했다.
