fix: complete legacy operator parity workflows
This commit is contained in:
@@ -15,14 +15,14 @@
|
||||
| 항목 | 상태 |
|
||||
|---|---|
|
||||
| 기본 모드 | `DryRun`; COM 객체와 `KTAPConnect`를 만들지 않음 |
|
||||
| 자동 테스트 | 최신 .NET solution 2,817/2,817, LegacyWeb 117/117, JavaScript 502/502 통과; 실패·skip 0건. Release 빌드 warning 0, error 0 |
|
||||
| 개발 MSIX UI/DB | 실제 Windows 입력으로 UC1~UC7, GraphE, FSell, VIList, ThemeA, EList, PList 모달과 개발 DB 저장→fresh readback→delete/absence를 검증하고 cleanup 완료 |
|
||||
| 자동 테스트 | 최신 Release x64 .NET solution 3,182/3,182, LegacyParityWeb 150/150, WebPlayout JavaScript 424/424, 원본 scene 기준선 35/35와 staged PGM 정적 계약 통과; 실패·skip 0건 |
|
||||
| 개발 MSIX UI/DB | 최신 등록 AppX에서 실제 Windows 입력 1,838건으로 UC1~UC7, GraphE, FSell, VIList, ThemeA, EList, PList 모달, 설정·비교 가져오기와 개발 DB 저장→fresh readback→delete/absence를 검증하고 cleanup 완료 |
|
||||
| 고객 배포 MSIX | 현재 범위에서 보류. 고객용 version·Publisher·서명 인증서·업데이트와 새 PC 로컬 설정 배포는 사용자가 재개할 때 결정 |
|
||||
| 실제 DB read→DTO→mutation smoke | 34개 도달 가능 data route 통과: 33개 DB + `s5025` trusted 외부 CP949 파일. `s8086` diagnostic과 NXT restore audit를 포함한 Oracle/MariaDB query 58건 통과. 종속 asset·운영 DB-W·PGM 검증은 포함하지 않음 |
|
||||
| `s5025` trusted 수동 파일 | 외부 CP949 source 통합 검증 통과; 실제 파일/환경은 계속 Git 밖에서 회차별 preflight |
|
||||
| `s5006` `Video\큐브배경.vrv` | 현재 승인 Cuts root에서 누락 |
|
||||
| `s6001` 해외지수 영상 | 국가별 `Video\20201008_<국가>.vrv` 13개가 현재 승인 Cuts root에서 누락; 외부자산 필요 |
|
||||
| 이번 마이그레이션 WebView workflow의 실제 Tornado2 검증 | **32/34 runtime route 완료. 5001/5074 재검증, 자산 비의존 30개 route, 5077 20페이지 전체, 5088 전환, retired/final unload 완료. 미검증은 외부자산이 없는 s5006/s6001뿐** |
|
||||
| `s6001` 해외지수 영상 | 국가별 `Video\20201008_<국가>.vrv` 13개가 현재 승인 Cuts root에서 누락해 해당 action만 제한. 영상 비의존 두바이유·WTI·브렌트유·금 4 action은 실제 PGM 완료 |
|
||||
| 이번 마이그레이션 WebView workflow의 실제 Tornado2 검증 | **33/34 runtime route code 완료. 5001/5074, 자산 비의존 30개 route, 5077 20페이지 전체, 5088 전환, s6001 영상 비의존 4 action, retired/final unload 완료. route code 미검증은 s5006뿐이며 s6001 국가 영상 action은 외부자산 대기** |
|
||||
|
||||
1.0.2 Visual Studio 개발 등록본을 signed 1.0.3으로 교체할 때 `Remove-AppxPackage -PreserveApplicationData`를 사용했다. 재등록 구간에서 바뀐 파일은 Windows package Settings transaction log `settings.dat.LOG1/LOG2`뿐이었고, WebView LocalState와 외부 `%LOCALAPPDATA%\MBN_STOCK_WEBVIEW` 운영 데이터는 삭제·덮어쓰지 않았다. 이 패키지 검증 회차는 기본 설정 부재와 환경 override 0건을 확인한 `DryRun`으로만 실행했으며 Tornado 실제 명령은 보내지 않았다.
|
||||
|
||||
@@ -167,20 +167,20 @@ SHA-256 `7A1141C5F276729E340227CEEAA48B0E6018632BBA51F43AA94636084AA3C301`이며
|
||||
## 화면/계약과 운영 검증의 분리
|
||||
|
||||
- 화면·native bridge·DTO·mutation·identity 상관 계약이 존재하고 자동 테스트가 통과한 상태를 화면/계약 구현으로 기록한다.
|
||||
- PList의 기존 한국어 `DC_TITLE`/`LIST_TEXT` 2,213행은 read-only 무손상 대조를 마쳤고 통합 `selectionMapped=1,603`/차단 610이다. 이는 scene/asset/PREPARE/PGM 완료가 아니며 manual named 운영 write→reload는 미검증이다.
|
||||
- ThemeA/EList의 expected identity 계약은 구현됐지만 실제 운영 DB에서 KRX/NXT·동명이름·코드 경계와 정확한 selected-row replace/delete를 확인하지 않았다.
|
||||
- PList의 기존 한국어 `DC_TITLE`/`LIST_TEXT` 2,213행은 모두 목록과 scene alias로 로드된다. 최신 fresh typed selection은 1,617행, 식별정보 부족 보류는 596행이며, PList와 PROGRAM named playlist의 개발 DB create/save→fresh readback→delete/absence를 최신 AppX 실제 입력으로 확인했다. 이는 보류 행의 asset/PREPARE/PGM 완료나 운영 DB 포괄 쓰기 허가를 뜻하지 않는다.
|
||||
- ThemeA/EList는 최신 `catalog` 299입력 회차에서 KRX/NXT·동명이름·코드 경계, selected-row 편집·저장·fresh readback·삭제·absence와 cleanup을 개발 DB에서 확인했다.
|
||||
- 원본 `종목비교.dat` 8쌍은 signed package에서 one-time 실행·재시작 영속성을 확인했다. FSell/VI는 격리 import fixture와 현재 운영 파일 read-only 불변 검증을 마쳤지만 기존 운영 파일은 덮어쓰지 않았다.
|
||||
- GraphE·PList/AList·ThemeA·EList의 실제 운영 DB-W와 승인된 `5001`/`5074` 밖의 PGM은 미검증이다. 이 작업은 승인된 테스트 데이터·rollback과 장면별 별도 회차가 있어야 한다.
|
||||
- GraphE·PList/AList·ThemeA·EList의 개발 DB CRUD는 승인된 임시 식별자로 완료했다. 실제 PGM은 승인된 action 범위에서 33/34 runtime route code를 검증했고 route code 미검증은 `s5006`뿐이다. `s6001`은 영상 비의존 4 action을 완료했으며 국가 영상 action은 외부자산 대기다. 운영 DB 포괄 write와 고객 환경은 별도 범위다.
|
||||
|
||||
## 절대 안전 규칙
|
||||
|
||||
1. 앱의 기본값은 항상 `DryRun`으로 유지한다.
|
||||
2. `DryRun`, `--probe`, `--dry-run`, `--test-plan`은 `KTAPConnect`를 호출하지 않는다. 이때 Tornado2 Network Monitoring에 기록이 없는 것이 정상이다.
|
||||
3. 실제 출력은 승인된 테스트 scene, 지정된 PGM, 지정된 회차에서만 허용한다.
|
||||
4. Connect/PREPARE를 시작하기 전에 회차 범위 승인이 있어야 한다. **현재 PGM에 TAKE IN을 보내기 직전에는 같은 회차의 별도 명시적 승인을 다시 받아야 한다.**
|
||||
5. 승인에 없는 NEXT, Page NEXT, TAKE OUT 이외 명령 또는 다른 scene으로 범위를 넓히지 않는다.
|
||||
3. 실제 출력은 허용된 테스트 scene, 지정된 PGM, 지정된 회차 범위에서만 수행한다.
|
||||
4. 운영·방송 또는 비지정 환경은 아래 Gate A/B의 회차별 승인을 적용한다. 현재 지정 개발 PC는 [개발 환경 상시 권한](DEVELOPMENT_ENVIRONMENT_AUTHORIZATION.md)의 범위·대상 확인·기술적 중단 조건을 적용하며 별도 대화 승인을 반복하지 않는다.
|
||||
5. 회차 범위에 없는 NEXT, Page NEXT, TAKE OUT 이외 명령 또는 다른 scene으로 범위를 넓히지 않는다.
|
||||
6. timeout, `OutcomeUnknown`, `WEB_TIMEOUT`, refresh fault, 응답/화면 불일치, 대상 프로세스 변경, callback 누락 상태에서는 같은 명령을 자동 또는 수동으로 반복하지 않는다.
|
||||
7. 실제 검증 회차에는 `reconnectEnabled=false`, `maximumReconnectAttempts=0`을 사용한다. 재접속은 새 회차와 새 승인으로만 수행한다.
|
||||
7. 실제 검증 회차에는 `reconnectEnabled=false`, `maximumReconnectAttempts=0`을 사용한다. 재접속은 기존 회차를 재사용하지 않고 대상과 상태를 다시 확인한 새 회차로만 수행한다.
|
||||
8. 안전 게이트, x64 vendor hash pin, scene allowlist, process/window/port ownership 검사를 완화하지 않는다.
|
||||
9. Web 입력으로 object 이름, 파일 경로, K3D method, 임의 SQL을 받지 않는다.
|
||||
10. 실제 on-air일 수 있는 scene을 수동으로 unload하거나 COM RCW를 강제 release하지 않는다.
|
||||
@@ -192,7 +192,7 @@ SHA-256 `7A1141C5F276729E340227CEEAA48B0E6018632BBA51F43AA94636084AA3C301`이며
|
||||
|
||||
- 원본 test Cuts root: `C:\Users\MD\source\repos\MBN_STOCK_N\MBN_STOCK_N\bin\Debug\Cuts`
|
||||
- 실제 `.t2s`, image, texture, video와 기타 scene 자산
|
||||
- `s5006`의 상대 자산 `Video\큐브배경.vrv`와 `s6001` 해외지수의 국가별 영상 13개; 현재 위 Cuts root에는 없으므로 제공 전 해당 장면의 실제 PREPARE 금지
|
||||
- `s5006`의 상대 자산 `Video\큐브배경.vrv`와 `s6001` 해외지수의 국가별 영상 13개; 현재 위 Cuts root에는 없으므로 제공 전 해당 자산 의존 action의 실제 PREPARE 금지
|
||||
- 정상 앱의 FSell/VI private 저장소 `%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\OperatorData`. 원본 `Data`를 strict CP949·hash·durable intent로 검증해 이 위치로 이전하는 one-time importer는 구현했지만, 현재 운영 profile의 기존 파일을 덮어쓰거나 marker를 임의 생성하지 않음
|
||||
- Oracle/MariaDB host, SID/service, database, user, password와 운영 query selector
|
||||
- K3D/Tornado vendor DLL, Interop, license와 설치 경로
|
||||
@@ -201,9 +201,13 @@ SHA-256 `7A1141C5F276729E340227CEEAA48B0E6018632BBA51F43AA94636084AA3C301`이며
|
||||
- 실제 Tornado host/port, output channel, PGM 창 정보와 운영 설정
|
||||
- Network Monitoring/PGM screenshot·영상·manifest 등 실제 방송 증거
|
||||
|
||||
Cuts root는 이번 작업에서 읽기 전용으로 취급한다. 현재 작업 트리의 [`Test-LegacyCutCoverage.ps1`](../scripts/Test-LegacyCutCoverage.ps1) 보강은 기존 45개 active alias 결과와 [`LegacyCutRequirements.json`](../scripts/LegacyCutRequirements.json)의 builder 소유 image·texture·video 23개를 함께 검사하는 단계다. 절대 경로, root 탈출, 누락·빈 파일과 root부터 파일까지의 reparse point를 실패로 보고하도록 구성했지만 최종 전체 회귀·패키지 반영 전에는 `적용 중`으로 판정한다. 현재 승인 Cuts에서는 `s6001`의 서로 다른 국가 영상 13개와 `s5006`의 `Video\큐브배경.vrv`가 `Missing`으로 명시되어야 정상이며, 누락 상태에서는 해당 장면의 PREPARE로 진행하지 않는다.
|
||||
Cuts root는 이번 작업에서 읽기 전용으로 취급한다. [`Test-LegacyCutCoverage.ps1`](../scripts/Test-LegacyCutCoverage.ps1)은 기존 45개 active alias와 [`LegacyCutRequirements.json`](../scripts/LegacyCutRequirements.json)의 builder 소유 image·texture·video를 함께 검사하며 전체 회귀와 최신 패키지에 반영됐다. 절대 경로, root 탈출, 누락·빈 파일과 root부터 파일까지의 reparse point를 실패로 보고한다. 현재 승인 Cuts에서는 `s6001`의 서로 다른 국가 영상 13개와 `s5006`의 `Video\큐브배경.vrv`만 optional `Missing`으로 명시되는 것이 정상이며, 누락 상태에서는 해당 자산 의존 action의 PREPARE로 진행하지 않는다.
|
||||
|
||||
## 승인 게이트
|
||||
## 운영·비지정 환경 승인 게이트
|
||||
|
||||
아래 Gate A/B는 운영·방송 대상 또는 현재 지정 개발 PC가 아닌 환경에 적용한다. 지정 개발
|
||||
Tornado2/PGM의 마이그레이션·동등성 검증은 [개발 환경 상시 권한](DEVELOPMENT_ENVIRONMENT_AUTHORIZATION.md)을
|
||||
사용해 회차 범위와 대상 식별을 증거에 고정하되, 사용자에게 동일 범위의 대화 승인을 다시 요구하지 않는다.
|
||||
|
||||
### Gate A: 회차 범위 승인
|
||||
|
||||
|
||||
Reference in New Issue
Block a user