98 lines
7.2 KiB
Markdown
98 lines
7.2 KiB
Markdown
# MBNWEB-20260712-M-R2 기존 종료 대화상자 확인 계획
|
||
|
||
M-R1은 운영체제 정상 닫기 요청을 정확히 한 번 보낸 뒤, WinUI가 같은 제목을 dialog
|
||
Window와 제목 Text로 각각 노출하는 정상 구조를 중복 제목으로 오판해 실패 폐쇄됐다.
|
||
이 회차는 닫기 요청을 다시 보내지 않고 **이미 열린 정확한 중립 대화상자의
|
||
PrimaryButton만 한 번 확인**하기 위한 별도 confirm-only 회차다. 현재 상태는
|
||
계획·도우미 검증 완료, 승인 대기이며 UI 확인과 DISCONNECT/BYE는 실행하지 않았다.
|
||
|
||
## 고정 산출물
|
||
|
||
| 항목 | 크기 | SHA-256 |
|
||
|---|---:|---|
|
||
| `round-plan.json` | 37,950 bytes | `EEB5C9102D5A797EB459E79F29932E58E921F33C957842477FD9E0BF993E4EB4` |
|
||
| `round-m-r2-confirm.ps1` | 67,779 bytes | `DDEA4081FAECD68ADF7BA1E490FB380EE118115024AB98249FAC1CCC79F00084` |
|
||
| 운영/시험 계획 빌더(서로 byte-identical) | 33,459 bytes | `C73BEBFE52A3851F4F47DA82F1667B3412780B19A156E5225680EB956C2CE21A` |
|
||
| 승인 빌더 | 5,391 bytes | `6EDDCD19A4888447A30EABEF34B6100C31842C1986E00CF4804174A47D0647FC` |
|
||
| 정적 시험 | 9,957 bytes | `8947CEE9004C66A0239FFDCE56EA4EC12D4CA090ABAFB2DE1CAFD7793513E0C0` |
|
||
| 승인 문구 템플릿 | UTF-8 text | `11E5EEF315895C20C906ECED4DECB920CC70F04A7BF376010FDA833328210AD4` |
|
||
| 이 계획에 채워진 전체 승인 문구 | UTF-8 text | `2DA9CC53A73FC40A96269491A1E7FA29221EFFB0281BEB67B9D68A70707FDD57` |
|
||
|
||
운영 산출물은 Git 제외 경로
|
||
`artifacts/pgm-evidence/MBNWEB-20260712-M-R2`에 있다. 계획 JSON은 엄격한
|
||
UTF-8 파싱에 성공했고, Windows PowerShell 5 정적 검사와 승인 빌더·확인 도우미의
|
||
`ValidateOnly`가 모두 통과했다. 검증 전후 고정 파일 해시는 동일하고 M-R2
|
||
승인·실행·confirm dispatch·complete·result 파일 5개는 모두 없다.
|
||
감사 중 발견된 이전 계획 35,606 bytes,
|
||
`57225B876FEAD5784CE0D5F9DEF0A5885A802DEC14015AAC638E9120CB61E5AB`은
|
||
승인 금지 superseded 증거로만 보존한다.
|
||
|
||
## M-R1과 현재 상태 결박
|
||
|
||
| 항목 | 기대값 |
|
||
|---|---|
|
||
| M-R1 계획 | 17,466 bytes, `E5D12936867203B83306D0B6D98AC8347DD7E5914CCAEB941528CD866569BC77` |
|
||
| M-R1 승인 | 2,707 bytes, `0019696B9354885BB9157F689AAD537E62C9AEB8A8F50C49C1D0629E26CA9B6F` |
|
||
| M-R1 실행 marker | 4,912 bytes, `E188D8E540644B94DD105D8A10CBF5A614563190A8D0FED1099AFE1BACFBE496` |
|
||
| M-R1 닫기 요청 journal | 425 bytes, `767648452A11A7BDC8B272D4BB8F9E4DC8D629228938EA682B0C4D60A4C7DE23` |
|
||
| M-R1 결과 | 1,914 bytes, `6543B53F1D5D99B707FC2E04A1F09EA61E39714FE468FA7CF029C85A720851C9` |
|
||
| M-R1 명령 | `CloseMainWindow=1`, `Invoke=0`, retry·송출·DB·직접 CDP/K3D=0 |
|
||
| 앱 / CDP | PID 37916 / 34988, 기존 시작 세대와 `127.0.0.1:9339` 유지 |
|
||
| Tornado2 | PID 6972, 기존 시작 세대와 `0.0.0.0:30001` listener 유지 |
|
||
| 앱↔Tornado TCP | `127.0.0.1:23210 <-> 127.0.0.1:30001` 정확히 두 행 |
|
||
| Network Monitoring | 142,844 chars, `839882172C79211517E4C3C81EBF95E65B322B6418B086985EE13E917A3F5A37` |
|
||
| Round M 이후 증가분 | HELLO 요청·성공 각 1회뿐, 266 chars, `3B4B7946CB345B121880CC1EF904E429A16A367F3AF6DD23FCFFDEF559EAAFF4` |
|
||
| M-R1 닫기 뒤 증가분 | 0 chars, BYE·송출 명령 0 |
|
||
| PGM | 8×8 표본 64개 RGB 최대값 0, 검은 화면 |
|
||
| 안전 부재 경로 | Round M runtime/prepare/config/capability 6개와 M-R1 confirm 파일 2개, 총 8개 |
|
||
|
||
## 정확한 UIA 구조
|
||
|
||
계획은 다음 9개 요소의 RuntimeId, PID, FrameworkId, ClassName, ControlType, Name,
|
||
AutomationId, Enabled, Offscreen, 경계 사각형과 부모·형제 관계를 모두 고정한다.
|
||
정규화된 구조의 SHA-256은
|
||
`39253843B55682066E786AA9217BA5420BC7ED97E9BBC0E38A822A36C5696E75`이다.
|
||
|
||
```text
|
||
DesktopChildSiteBridge Pane (Win32)
|
||
└─ InputSite Pane (XAML)
|
||
├─ generic Popup Window: Name=Popup
|
||
└─ dialog Window: Name=프로그램 종료
|
||
├─ ContentScrollViewer
|
||
│ ├─ Text: 프로그램 종료
|
||
│ └─ Text: 프로그램을 종료하시겠습니까?
|
||
├─ Button: 종료, AutomationId=PrimaryButton
|
||
└─ Button: 취소, AutomationId=CloseButton
|
||
```
|
||
|
||
dialog의 Button은 위 두 개, Text는 위 두 개만 허용한다. 앱 전체에서 `종료` 이름의
|
||
Button은 하나여야 하고, PrimaryButton은 활성·화면 표시·InvokePattern 지원 상태여야
|
||
한다. pending, prepared, outcome-unknown 또는 방송 경고 문자열이 나타나면 확인하지
|
||
않는다. InputSite의 전체 직접 자식 RuntimeId 집합은 정확히 9개, 그중 Window
|
||
부분집합은 generic Popup과 dialog Window 2개로 고정한다.
|
||
|
||
## 승인 후 허용되는 유일한 흐름
|
||
|
||
1. 계획, M-R1 증거, 프로세스·창·listener 세대, TCP, Network 로그, 검은 PGM과
|
||
정확한 UIA 구조를 모두 읽기 전용으로 재검증한다.
|
||
2. 승인 파일과 계획·도우미 해시를 확인하고 내구성 실행 marker를 기록한다.
|
||
3. 전체 상태와 승인 freshness를 다시 확인한 뒤 confirm may-have-issued journal을
|
||
`CreateNew`, `WriteThrough`, `Flush(true)`로 먼저 기록한다.
|
||
4. journal 뒤 M-R1/M-R2 control file, 전체 외부 상태, UIA RuntimeId와 구조 해시,
|
||
계획·도우미·승인을 다시 확인한다. 새로 얻은 정확한 PrimaryButton element의
|
||
UIA `Invoke`를 한 번만 호출한다.
|
||
5. 앱·CDP·9339 listener와 기존 active TCP가 사라지고 Tornado2 세대·창·30001
|
||
listener가 유지되는지 확인한다. Network suffix는 BYE 요청 정확히 1회와 성공
|
||
0~1회만 허용하며 PGM은 계속 검은 화면이어야 한다.
|
||
|
||
`CloseMainWindow` 재호출, 다른 UI Invoke, 좌표 클릭·키 입력, PREPARE, TAKE IN,
|
||
NEXT, Page NEXT, TAKE OUT, DB write, 재연결, 재실행, 직접 CDP/K3D 명령,
|
||
강제 종료, 재시도와 Tornado2 창 복원은 허용하지 않는다. 어느 경계든 달라지거나
|
||
결과가 불명확하면 추가 명령 없이 즉시 중단한다.
|
||
|
||
## 정확한 승인 문구
|
||
|
||
아래 한 줄을 그대로 승인해야 한다. 계획 해시가 다르면 승인 효력이 없다.
|
||
|
||
> 회차 MBNWEB-20260712-M-R2의 확인 전용 계획 SHA-256 EEB5C9102D5A797EB459E79F29932E58E921F33C957842477FD9E0BF993E4EB4을 승인한다. M-R1 close-result SHA-256 6543B53F1D5D99B707FC2E04A1F09EA61E39714FE468FA7CF029C85A720851C9가 outcome-unknown 상태이고, 운영체제 정상 닫기 요청 CloseMainWindow가 이미 정확히 1회 소비되었으며 확인 Invoke는 0회임을 확인한다. 현재 K3D 라이선스가 유효하고 Tornado2 PID 6972가 지정된 주 프로그램임을 확인하며, 현재 실행 중인 MBN_STOCK_WEBVIEW PID 37916, 시작 시각 2026-07-12T18:59:06.3837959Z에 이미 열려 있는 '프로그램 종료' 대화상자가 '프로그램을 종료하시겠습니까?'라는 중립 문구와 '종료' PrimaryButton 및 '취소' CloseButton만 정확히 표시할 때, 기존 '종료' 확인 Invoke 정확히 1회와 그 정상 종료 과정에서 발생하는 DISCONNECT/BYE 최대 1회만 승인한다. CloseMainWindow 재호출, 다른 UI Invoke, PREPARE, TAKE IN, NEXT, Page NEXT, TAKE OUT, DB write, 재연결, 재실행, 직접 CDP/K3D 명령, 프로세스 강제 종료, 재시도 및 Tornado2 창 복원은 승인하지 않는다. 사전 조건이 하나라도 달라지거나 결과가 불명확하면 추가 명령 없이 즉시 중단한다.
|