docs: record external close audit and window prerequisites
This commit is contained in:
@@ -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으로 남겼다.
|
||||
|
||||
## 고정 산출물
|
||||
|
||||
|
||||
@@ -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과 재시도를 하지 않는다.
|
||||
Reference in New Issue
Block a user