From e468f43886c34e63461bd6247af9c3474dd5067b Mon Sep 17 00:00:00 2001 From: Wickedness Date: Mon, 13 Jul 2026 11:20:08 +0900 Subject: [PATCH] docs: record external close audit and window prerequisites --- ..._CONFIRMATION_PLAN_MBNWEB-20260712-M-R2.md | 59 +++++++++++++++- ...RE_PREREQUISITES_MBNWEB-20260712-M-R1-W.md | 69 +++++++++++++++++++ 2 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 docs/LIVE_WINDOW_RESTORE_PREREQUISITES_MBNWEB-20260712-M-R1-W.md diff --git a/docs/LIVE_CONFIRMATION_PLAN_MBNWEB-20260712-M-R2.md b/docs/LIVE_CONFIRMATION_PLAN_MBNWEB-20260712-M-R2.md index cb3facf..3331785 100644 --- a/docs/LIVE_CONFIRMATION_PLAN_MBNWEB-20260712-M-R2.md +++ b/docs/LIVE_CONFIRMATION_PLAN_MBNWEB-20260712-M-R2.md @@ -3,8 +3,63 @@ M-R1은 운영체제 정상 닫기 요청을 정확히 한 번 보낸 뒤, WinUI가 같은 제목을 dialog Window와 제목 Text로 각각 노출하는 정상 구조를 중복 제목으로 오판해 실패 폐쇄됐다. 이 회차는 닫기 요청을 다시 보내지 않고 **이미 열린 정확한 중립 대화상자의 -PrimaryButton만 한 번 확인**하기 위한 별도 confirm-only 회차다. 현재 상태는 -계획·도우미 검증 완료, 승인 대기이며 UI 확인과 DISCONNECT/BYE는 실행하지 않았다. +PrimaryButton만 한 번 확인**하기 위한 별도 confirm-only 회차다. M-R2는 승인 후 +정확히 한 번 시작됐지만, 사전 검사에서 기존 앱이 이미 종료된 것을 확인해 +`FAIL_KNOWN_NO_COMMAND`로 실패 폐쇄됐다. M-R2가 실행한 UI 확인, DISCONNECT/BYE, +송출 명령은 모두 0이며 재시도하지 않는다. + +## 실행 결과와 외부 정상 종료 + +| 항목 | 값 | +|---|---| +| M-R2 승인 | 2,804 bytes, `2ACF4393E67CF482A14810ED8CAD213866E1567EF180B3E0AC4CCA5895EBFB53` | +| M-R2 결과 | 1,755 bytes, `4BC8F0B230DA0CB00784BD2F408FC6840F5BDC6AEBDA721890CD70AF5E120CED` | +| 상태 | `FAIL_KNOWN_NO_COMMAND`, `outcomeUnknown=false` | +| 실행 / confirm dispatch / complete journal | 모두 생성되지 않음 | +| M-R2 CloseMainWindow / Invoke / DISCONNECT / 송출 | 모두 `0` | +| 기존 앱·CDP | PID 37916 / 34988 모두 종료 | +| 기존 Tornado TCP | 제거됨 | +| Tornado2 | PID 6972와 `0.0.0.0:30001` listener 유지 | +| PGM | 64표본 최대 RGB 0, 144×81 검은 화면 | + +M-R2 승인 기록은 `2026-07-13T01:40:15.5163471Z`에 생성됐다. 기존 세션은 +`01:40:19.877Z`에 Network Monitoring에 `[R] BYE Bye` 요청 한 줄을 남겼고, +Windows AppModel은 `01:40:20.2324722Z`에 기존 MSIX 컨테이너를 제거했다. M-R2 +도우미는 그보다 늦은 `01:40:23.3721293Z`에 시작해 약 0.05초 뒤 앱 부재로 +중단됐으므로 BYE와 앱 종료는 M-R2에서 발생하지 않았다. + +종료 전 Network 기준은 142,844 chars, +`839882172C79211517E4C3C81EBF95E65B322B6418B086985EE13E917A3F5A37`이고, +종료 뒤에는 142,969 chars, +`5773CD65CFCAA08D0112775AB39CA9E3E034086EAD87F0E0D424E3BF876A38F7`이다. +신규 suffix 125 chars의 SHA-256은 +`0316ED8228677624A7C557F506577EC6830B3EE3F1FB41C61761BC4C0F5910E2`이며 BYE 요청 +1회만 포함하고 성공·실패·오류·scene·송출 명령은 없다. 코드의 정상 종료 경로와 +일치하므로 기존 live 세션은 외부 동작으로 정상 종료된 것으로 기록하되, 사람의 +클릭인지 다른 UI 자동화인지는 단정하지 않는다. + +M-R2 결과 뒤 `2026-07-13T01:40:24.1318444Z`에 Explorer를 부모로 하는 새 앱 +PID 10868과 새 WebView 루트 PID 35328이 시작됐다. 이는 기존 세대와 분리해 +취급한다. 새 세대는 MariaDB/Oracle DB 소켓만 가지고 Tornado/30001 연결, +9339 debug listener와 신규 HELLO는 없다. 후속 live 검증은 이 새 세대를 기준으로 +다시 계획·승인해야 한다. + +위 상태는 별도 읽기 전용 회차 `MBNWEB-20260712-M-R2-AUDIT`로 고정했다. +외부 시스템 조작 예산과 실제 조작은 모두 0이다. + +| 감사 산출물 | 크기 | SHA-256 | +|---|---:|---| +| 감사 계획 | 18,716 bytes | `686631F6F8BF518F2B15FC10B46E8F8F9BD6337A42560D035E8E82CDDADE597C` | +| collector | 21,256 bytes | `FB44C78612697A5000432BEB47B6F5EF0FD2F1998B04EBB4D678ABF71C5B5817` | +| 운영/시험 계획 빌더 | 13,916 bytes | `737440149D5B23845770E15C8D0430D3490878222E20B3CA9A32222881CB4713` | +| `external-close-audit.json` | 12,042 bytes | `4466C7131D9D6D2BFBABC1B11D8BA685085EC8D9FE6D2393AE2F69E6A6F90955` | +| 정적 시험 | 6,031 bytes | `0FD7C5DAB33268FF5BB4048C7036B50CF418F245734FA67B857D741CB3F5864D` | + +감사 상태는 +`PASS_OLD_SESSION_KNOWN_CLOSED_EXTERNAL_NORMAL_BYE_NEW_GENERATION_UNCONNECTED`다. +수집 전후 `ValidateOnly`, PS5 AST와 정적 시험이 통과했고 고정 파일 해시는 변하지 +않았다. 새 세대의 DB 원격 주소·IP·로컬 임시 포트는 기록하지 않았고, 허용된 DB +포트 종류와 30001/9339 부재만 안전 projection으로 남겼다. ## 고정 산출물 diff --git a/docs/LIVE_WINDOW_RESTORE_PREREQUISITES_MBNWEB-20260712-M-R1-W.md b/docs/LIVE_WINDOW_RESTORE_PREREQUISITES_MBNWEB-20260712-M-R1-W.md new file mode 100644 index 0000000..c176661 --- /dev/null +++ b/docs/LIVE_WINDOW_RESTORE_PREREQUISITES_MBNWEB-20260712-M-R1-W.md @@ -0,0 +1,69 @@ +# 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과 재시도를 하지 않는다.