fix: complete legacy operator parity workflows

This commit is contained in:
2026-07-23 00:54:31 +09:00
parent 939c252d23
commit cf117de144
25 changed files with 2430 additions and 223 deletions

View File

@@ -354,7 +354,7 @@ CLI용 Test JSON은 위처럼 앱 기본 경로인 `playout.local.json`과 다
3. 잘못된 설정 또는 엔진 부재가 앱 종료가 아니라 연결 상태와 안전한 오류 메시지로 표시됩니다.
4. x64 MSIX를 설치해도 같은 dry-run 흐름이 동작합니다.
2026-07-18 현재 unsigned 개발 MSIX에서 실제 Oracle/MariaDB를 사용하는 전체 UI/DB 검증을 완료했습니다. 이어 지정 개발 Tornado2/PGM에서 `5001 → 5074 Page NEXT → TAKE OUT`을 재검증하고 자산 비의존 30개 route 순차 검증했습니다. 실제 PGM 완료 범위는 32/34 route이며, 미검증은 원본 Cuts에도 영상이 없는 `s5006` `s6001`입니다. `5077`은 fresh DB 120건을 6행씩 1/20부터 20/20까지 이동했고 마지막 페이지에서 `5088` 12행 1/20으로 전환했습니다. 이전 scene unload와 최종 TAKE OUT/UNLOAD/IDLE, `FAILURE=0`, `ERROR=0`, retry 0, `OutcomeUnknown=false`를 확인했습니다.
2026-07-22 현재 최신 등록 개발 AppX에서 실제 Oracle/MariaDB를 사용하는 전체 UI/DB 검증을 완료했습니다. 실제 Windows 입력 1,838건과 설정·비교 가져오기 로컬 상태가 모두 통과했고 DB write 회차의 cleanup도 확인했습니다. 이어 지정 개발 Tornado2/PGM에서 `5001 → 5074 Page NEXT → TAKE OUT`, 자산 비의존 30개 route`s6001` 영상 비의존 두바이유·WTI·브렌트유·금 4 action을 순차 검증했습니다. 실제 PGM 완료 범위는 33/34 runtime route code이며, route code 미검증은 원본 Cuts에도 큐브 배경이 없는 `s5006`뿐입니다. `s6001` 국가 영상 13 action은 외부자산 대기 상태입니다. `5077`은 fresh DB 120건을 6행씩 1/20부터 20/20까지 이동했고 마지막 페이지에서 `5088` 12행 1/20으로 전환했습니다. 각 승인 회차의 이전 scene unload와 최종 TAKE OUT/UNLOAD/IDLE, retry 0, `OutcomeUnknown=false`를 확인했습니다. 기존 32 route 회차의 `FAILURE`/`ERROR`는 0이며, s6001은 필수 송출 명령이 모두 성공했지만 원본도 무시하는 보조 `wonText`/`pattern` 오브젝트 누락 로그가 남는 제한을 별도 증거에 기록했습니다.
WebView 상태 wire는 `Disconnected`, `Connecting`, `Connected`, `Reconnecting`, `Faulted`, `OutcomeUnknown` 등 native connection state를 별도로 전달합니다. Web catalog는 35개 builder와 도달 가능한 45개 alias, row별 `enabled`를 보존하고 PREPARE 성공 뒤 playlist snapshot을 freeze합니다. pending command, `OutcomeUnknown`과 timeout quarantine 중에도 snapshot 편집 잠금을 유지합니다. native status의 current entry/builder/page size/current rows/last-page와 bounded preview가 authoritative 값이며 asset path는 preview에서 숨깁니다. refresh active/next/last-success/fault도 전달하고 refresh fault는 TAKE OUT 외 mutation 명령을 막습니다. 성공한 TAKE OUT 뒤에는 전용 refresh error marker만 reset하며 다른 unknown latch를 지우지 않습니다. `OutcomeUnknown`과 timeout은 `retryable: false`이며 오류 창을 닫아도 native 잠금은 유지됩니다. 브라우저 응답 제한 시간은 검증된 native operation timeout에 5초 전달 여유를 더해 사용하며, 상관 응답이 오지 않으면 strict `ParseTimeoutQuarantine` 요청을 native에 보냅니다. MainWindow는 await 전에 process-lifetime latch를 세우고 vendor session을 quarantine하므로 WebView reload로도 해제되지 않습니다. 명령 진행 중 trusted navigation, reload 또는 WebView2 process failure로 JavaScript 상관관계가 사라지는 경우도 같은 native latch를 먼저 세웁니다. 늦은 응답이나 UI 재시도로 같은 명령을 다시 보내지 않으며 native 명령이 끝나면 authoritative status를 다시 게시합니다. NEXT는 원본의 `m_TakeIn` 조건처럼 on-air 장면이 있을 때만 native와 Web 양쪽에서 허용됩니다. Test on-air 배지는 실제 PROGRAM과 구분해 `TEST ON AIR`로 표시합니다.
@@ -367,8 +367,8 @@ On-air 표식이 남은 상태에서는 프로세스 감시, 연결 해제, 앱
- ThemeA 기존 편집은 활성 종목 preview가 아니라 raw `SB_ITEM` 전체를 읽어 비활성 종목, 교차 prefix와 동일 순번 중복을 보존한다. 이 완화는 편집용 raw 행에만 적용되며 송출용 active preview와 신규 테마 시장 prefix 검증에는 적용하지 않는다.
- 개발 MSIX에서 PList create/save→fresh readback→delete/absence, ThemeA KRX/NXT와 EList create/edit/save→fresh readback→delete/absence를 실제 입력으로 검증하고 cleanup했다. 운영 DB에 대한 포괄적 쓰기 허가는 이 결과에 포함하지 않는다.
- 원본 `종목비교.dat`는 signed package에서 8쌍 one-time import와 재시작 marker를 확인했다. FSell/VI는 격리 fixture의 marker-last와 production opened-handle read를 통과했지만, 현재 운영 profile의 기존 동일 파일을 덮어쓰거나 marker를 새로 만들지 않았다.
- `s5006``Video\큐브배경.vrv``s6001` 해외지수 국가 영상 13개는 현재 승인 Cuts에 없으며, alias-only `Missing=0`은 asset-ready 증거가 아니다.
- 개발 PGM 32/34 route가 검증됐고, `s5006`/`s6001`은 외부자산 제공 전까지 fail closed한다. 아래 Round H 기록은 현재 결과가 아니라 역사적 증거로 보존한다.
- `s5006``Video\큐브배경.vrv``s6001` 해외지수 국가 영상 13개는 현재 승인 Cuts에 없으며, alias-only `Missing=0`은 asset-ready 증거가 아니다. 관련 action만 fail closed한다.
- 개발 PGM 33/34 runtime route code가 검증됐다. route code 미검증은 `s5006`이고, `s6001` 영상 비의존 4 action을 완료했으며 국가 영상 action만 외부자산 제공 전까지 제한한다. 아래 Round H 기록은 현재 결과가 아니라 역사적 증거로 보존한다.
### 역사적 Round 기록