# MBNWEB-20260712-M-R1-W 창 복원 선행 조건

이 문서는 Round M 전 Tornado2 창 배치를 복원하기 위한 읽기 전용 설계 결과다.
현재 환경에서는 안전한 정확 복원의 선행 조건이 충족되지 않아 **NO-GO**이며,
Gate W 계획·승인·실행 파일은 만들지 않았다.

## 고정 원본과 목표

| 원본 | 크기 | SHA-256 |
|---|---:|---|
| `pre-round-window-visibility.json` | 2,023 bytes | `76E528EFB8B859E203EB72AF6A0471F0A26B3050233296D2541B764896FA0409` |
| `window-state.json` | 2,862 bytes | `AF9270B1EE109D7D2337FD18C505D3FA416E2DBACD584B98FFAAC68B6065FAC7` |

두 파일은 Tornado2 PID 6972, 시작 세대 `639193655349284515`, PGM HWND 592052,
Network HWND 79286과 아래 목표를 동일하게 기록한다.

| 창 | 표시 | 최소화 | Cloaked | 목표 사각형 | Topmost band |
|---|---|---|---:|---|---|
| PGM | true | false | 0 | `(2306,776)-(3402,1410)`, 1096×634 | true |
| Network | true | false | 0 | `(0,0)-(843,566)`, 843×566 | false |

저장 증거에는 전역 z-order ordinal이나 anchor가 없다. 따라서 복원 가능한 의미는
각 창의 사각형·표시·최소화·cloaked·topmost band와 PGM이 Network보다 위인 상대
순서까지다. 증거에 없는 절대 전역 z-order를 재현했다고 주장하지 않는다.

## 현재 NO-GO 원인

현재 단일 primary monitor와 virtual desktop은 모두 `(0,0)-(2560,1440)`이고 work
area bottom은 1392다. PGM 목표 right 3402 중 842px가 가상 화면 밖이므로 기존
Round M의 화면 포함 조건을 통과하지 못한다. 좌표를 clamp하거나 다른 위치로
대체하면 원본 복원이 아니다.

또한 Network HWND 79286의 owner는 동일 Tornado2 프로세스의 HWND 264638이며,
현재 owner가 visible이지만 최소화된 상태다. Windows owned-window 동작상 owner가
최소화된 동안 Network 창을 표시해도 다시 숨겨질 수 있다. 원본 증거에는 owner
상태가 동결돼 있지 않고 Gate W 범위는 PGM과 Network 두 대상만이므로, 도우미가
owner를 복원하는 것은 범위 밖이다.

기존 live 세션 PID 37916과 CDP PID 34988, 30001 established TCP는 제거됐고
Tornado2의 `0.0.0.0:30001` listener만 유지된다. 새 앱 PID 10868은 Tornado/30001
및 9339에 연결되지 않았고 DB 연결만 보유한다. 이는 방송 안전의 직접 blocker는
아니지만 이후 모든 창 조작 경계에서 비연결 상태를 다시 확인해야 한다.

## 사용자가 먼저 복구해야 하는 조건

1. 원래 모니터 토폴로지를 복구해 virtual desktop이 PGM과 Network 목표 사각형을
   완전히 포함해야 한다. 최소한 virtual right는 3402 이상, bottom은 1410 이상이어야
   한다.
2. Tornado2 본 프로그램 owner 창을 사용자가 직접 일반 표시 상태로 복원해야 한다.
   Gate W preflight에서 HWND 264638이 visible=true, iconic=false인지 읽기 전용으로
   확인한다.
3. 위 조건을 만족한 새 snapshot으로 별도 계획·SHA-256·승인을 생성한다. 현재
   문서는 승인 계획이 아니며 어떤 창 조작도 허가하지 않는다.

## 조건 충족 뒤의 제한된 실행 계약

창별 synchronous `SetWindowPos` 호출만 정확히 한 번 허용하는 것이 권고안이다.

- Network 먼저: `HWND_NOTOPMOST`, `(0,0,843×566)`
- PGM 다음: `HWND_TOPMOST`, `(2306,776,1096×634)`
- 공통 flags: `SWP_NOACTIVATE | SWP_SHOWWINDOW | SWP_NOOWNERZORDER`
- `ShowWindow`, `SetWindowPlacement`, `MoveWindow`, `DeferWindowPos`, 키·마우스·UIA,
  AppActivate, 앱 실행과 K3D 명령은 0

실행 순서는 strict source/hash/schema 검증, Tornado/listener/창 owner/모니터/비연결
경계, 최신 승인, 내구성 execution journal, Network may-have-issued journal, 전체
재검증, Network 1회 호출·완료·후조건, PGM에 동일한 흐름, terminal result다.
어느 창이든 호출 실패·timeout·사후 drift가 발생하면 outcome-unknown으로 기록하고
다음 창 호출, rollback과 재시도를 하지 않는다.
