103 lines
7.8 KiB
Markdown
103 lines
7.8 KiB
Markdown
# MBNWEB-20260712-M-R1 연결 정리 계획
|
||
|
||
Round M은 CONNECT 뒤 PREPARE 전에 증거 감시기 회귀로 중단됐고, 앱과 Tornado2의
|
||
TCP 연결만 남았다. 이 회차는 그 연결을 **프로그램의 정상 종료 경로로 한 번만
|
||
정리**하기 위한 별도 fail-closed 회차다. M-R1은 승인 후 정확히 한 번 실행됐고,
|
||
**정상 닫기 요청 뒤 중립 종료 대화상자를 탐지하는 단계에서 실패 폐쇄**됐다.
|
||
확인 버튼·DISCONNECT/BYE는 실행되지 않았으며 같은 회차는 재시도하지 않는다.
|
||
|
||
## 실행 결과
|
||
|
||
| 항목 | 값 |
|
||
|---|---|
|
||
| 승인 | 2,707 bytes, `0019696B9354885BB9157F689AAD537E62C9AEB8A8F50C49C1D0629E26CA9B6F` |
|
||
| 실행 marker | 4,912 bytes, `E188D8E540644B94DD105D8A10CBF5A614563190A8D0FED1099AFE1BACFBE496` |
|
||
| 닫기 요청 journal | 425 bytes, `767648452A11A7BDC8B272D4BB8F9E4DC8D629228938EA682B0C4D60A4C7DE23` |
|
||
| 결과 | 1,914 bytes, `6543B53F1D5D99B707FC2E04A1F09EA61E39714FE468FA7CF029C85A720851C9` |
|
||
| 상태 | `OUTCOME_UNKNOWN_CLOSE_REQUEST_MAY_HAVE_OCCURRED` |
|
||
| 정상 닫기 요청 / 종료 확인 | `1 / 0` |
|
||
| DISCONNECT/BYE 관측 | 확인 전 단계라 미발행·미관측 |
|
||
| 송출·DB·직접 CDP/K3D·재시도·강제 종료·창 복원 | 모두 `0` |
|
||
|
||
실제 WinUI Automation 트리에는 `프로그램 종료` 이름이 Popup 내부 dialog Window와
|
||
제목 Text에 각각 한 번씩 노출되고, 본문 Text와 `PrimaryButton` 종료 버튼은 각각
|
||
한 번씩 정확하게 존재했다. M-R1 도우미는 control type을 구분하지 않고 제목 이름의
|
||
전체 개수를 1개로 제한해 정상적인 두 요소를 모호한 중복으로 판정했다. 따라서
|
||
대화상자는 열린 채 보존됐고 앱 PID 37916과 기존 Tornado TCP도 유지됐다. 후속
|
||
확인은 현재 열린 대화상자의 control type·AutomationId·계층을 명시적으로 결박한
|
||
새 회차와 새 승인을 사용한다.
|
||
|
||
## 고정 산출물
|
||
|
||
| 항목 | 크기 | SHA-256 |
|
||
|---|---:|---|
|
||
| `round-plan.json` | 17,466 bytes | `E5D12936867203B83306D0B6D98AC8347DD7E5914CCAEB941528CD866569BC77` |
|
||
| `round-m-r1-close.ps1` | 61,839 bytes | `FE01F8720DE9331B1B45F7FE3B66E17CD13B26E628967D785C74F890EA12D835` |
|
||
| 운영/시험 계획 빌더(서로 byte-identical) | 21,942 bytes | `A1A44651A757C988658DA1D20495F0F84A9A5C16EB51885490B1FC1A70008013` |
|
||
| 승인 빌더 | 5,389 bytes | `C242AC302166D20E4EEECEF7922B54674326D5E4AE10B194F7E706435472A24D` |
|
||
| 정적 시험 | 12,459 bytes | `705853EDCD8352F19C373793F3A9AE146CECE18F89238DE43C601CC173B074B1` |
|
||
| 승인 문구 템플릿 | UTF-8 text | `50A162618AB602745F4030F583E8F21F2366518266B19956335707C655748420` |
|
||
| 이 계획에 채워진 전체 승인 문구 | UTF-8 text | `0BC9B11EC90DA030A86F0240C92DFDB5585C504B69727959BD408608691C83C1` |
|
||
|
||
운영 산출물은 Git 제외 경로
|
||
`artifacts/pgm-evidence/MBNWEB-20260712-M-R1`에 있다. 이전 후보 계획
|
||
`C3212E15...`와 `6B8BC3A8...`은 감사용으로 보존하지만 승인 또는 실행에 사용하지
|
||
않는다.
|
||
|
||
## 실행 전 고정 상태
|
||
|
||
| 경계 | 기대값 |
|
||
|---|---|
|
||
| Round M 결과 | 32,877 bytes, `019826B736B80A6C0DB696A5DF55DA68432D314B68EC79A4138E64DDB20870FC` |
|
||
| 앱 | PID 37916, 시작 `2026-07-12T18:59:06.3837959Z`, HWND 1128632, responsive |
|
||
| WebView2 CDP listener | PID 34988, 앱의 자식, `127.0.0.1:9339` |
|
||
| Tornado2 | PID 6972, 시작 `2026-07-11T11:18:54.9284515Z`, `0.0.0.0:30001` listener |
|
||
| PGM / Network HWND | 592052 / 79286 |
|
||
| 앱↔Tornado TCP | `127.0.0.1:23210 <-> 127.0.0.1:30001`, 생성 세대 고정 |
|
||
| Round M 이후 Network 증가분 | 266 chars, `3B4B7946CB345B121880CC1EF904E429A16A367F3AF6DD23FCFFDEF559EAAFF4` |
|
||
| 신규 명령 | `HELLO` 요청 1회와 성공 1회만 존재 |
|
||
| PGM | 8×8 표본 64개 RGB 최대값 0, 검은 화면 |
|
||
| 금지 파일 | Round M runtime/prepare journal/local live config/capability 6개 모두 없음 |
|
||
|
||
검증 모드는 위 상태를 읽기만 한다. 엄격한 UTF-8 JSON 파싱, Windows PowerShell 5
|
||
구문 검사, 정적 호출 수 검사, 승인 빌더 `ValidateOnly`, 종료 도우미
|
||
`ValidateOnly`가 모두 통과했다. 검증 전후 고정 산출물 해시는 동일했고 승인·실행·
|
||
may-have-issued 파일 6개는 생성되지 않았다. 정적 검사 결과는 정상 닫기 요청 호출
|
||
지점 1개, 중립 종료 확인 호출 지점 1개, 금지된 송출·직접 K3D/CDP·창 조작 호출
|
||
지점 0개다.
|
||
|
||
독립 감사 결과는 P0 0건, P1 0건이다. 비차단 P2 권고 1건은 원본 증거 파일을
|
||
해시한 뒤 다시 열어 파싱하는 사이의 매우 좁은 교체 경쟁이며, 이 회차에서는 원본
|
||
Round M 디렉터리를 immutable로 취급하고 모든 파일의 크기·해시를 다시 확인해
|
||
수용했다. 이 경로에는 승인 전후 어떤 작성기도 두지 않는다.
|
||
|
||
## 승인 후 허용되는 유일한 흐름
|
||
|
||
1. 계획, 원본 Round M 증거, 프로세스 세대, 창 identity, Tornado listener, TCP,
|
||
Network 증가분, PGM 검은 화면과 금지 파일 부재를 모두 재검증한다.
|
||
2. 승인 파일이 계획 해시와 정확히 결박되고 900초 이내인지 확인한다.
|
||
3. 정상 닫기 요청의 `may-have-issued` 저널을 `WriteThrough`와 `Flush(true)`로 먼저
|
||
기록한다. 그 뒤 전체 상태·계획·도우미·승인 freshness를 다시 확인하고 운영체제
|
||
정상 닫기 요청을 정확히 한 번만 보낸다.
|
||
4. 제목 `프로그램 종료`, 본문 `프로그램을 종료하시겠습니까?`, 활성 기본 버튼
|
||
`종료`인 중립 대화상자 하나만 허용한다. pending/prepared/송출 경고 문구 또는
|
||
다른 대화상자면 확인하지 않고 중단한다.
|
||
5. 대화상자가 열린 상태에서 전체 경계를 다시 읽고 확인 요청의
|
||
`may-have-issued` 저널을 내구성 있게 기록한다. 다시 전체 상태·계획·승인을
|
||
확인한 다음 새 UI Automation element로 `종료`를 정확히 한 번만 누른다.
|
||
6. 앱과 CDP가 종료되고 앱 소유 active TCP가 사라지며 Tornado listener 세대가
|
||
유지되는지 확인한다. Network 증가분은 `BYE` 요청 정확히 1회, 성공 0~1회만
|
||
허용하고 PGM은 계속 검은 화면이어야 한다.
|
||
|
||
중간 상태가 하나라도 달라지거나 결과가 불명확하면 추가 명령 없이 즉시 중단한다.
|
||
재시도, 프로세스 강제 종료, PREPARE, TAKE IN, NEXT, Page NEXT, TAKE OUT,
|
||
DB write, 재연결, 재실행, 직접 CDP/K3D 명령과 Tornado2 창 복원은 이 회차에서
|
||
허용하지 않는다. PGM/Network 창 복원은 known-clean 연결 정리 결과를 결박한 별도
|
||
Gate W 계획과 별도 승인을 사용한다.
|
||
|
||
## 정확한 승인 문구
|
||
|
||
아래 한 줄을 그대로 승인해야 한다. 계획 해시가 다르면 승인 효력이 없다.
|
||
|
||
> 회차 MBNWEB-20260712-M-R1의 연결 정리 계획 SHA-256 E5D12936867203B83306D0B6D98AC8347DD7E5914CCAEB941528CD866569BC77을 승인한다. Round M 결과 SHA-256 019826B736B80A6C0DB696A5DF55DA68432D314B68EC79A4138E64DDB20870FC가 outcome-unknown 상태이며, 현재 PGM이 검은 화면이고 Round M 기준 신규 Network Monitoring 기록이 HELLO 요청과 성공 각 1회뿐임을 확인한다. 현재 K3D 라이선스가 유효하고 Tornado2 PID 6972가 지정된 주 프로그램임을 확인하며, 현재 실행 중인 MBN_STOCK_WEBVIEW PID 37916, 시작 시각 2026-07-12T18:59:06.3837959Z에 대해 운영체제 정상 닫기 요청 정확히 1회와, '프로그램 종료' 대화상자가 '프로그램을 종료하시겠습니까?'라는 중립 문구를 표시할 때에만 '종료' 확인 정확히 1회, 그 정상 종료 과정에서 발생하는 DISCONNECT/BYE 최대 1회만 승인한다. PREPARE, TAKE IN, NEXT, Page NEXT, TAKE OUT, DB write, 재연결, 재실행, 직접 CDP/K3D 명령, 프로세스 강제 종료, 재시도 및 Tornado2 창 복원은 승인하지 않는다. 사전 조건이 하나라도 달라지거나 결과가 불명확하면 추가 명령 없이 즉시 중단한다.
|