docs: record round M outcome and reconciliation gate

This commit is contained in:
2026-07-13 05:25:31 +09:00
parent ff6126610c
commit 55ca16d5e0
2 changed files with 123 additions and 2 deletions

View File

@@ -0,0 +1,80 @@
# MBNWEB-20260712-M-R1 연결 정리 계획
Round M은 CONNECT 뒤 PREPARE 전에 증거 감시기 회귀로 중단됐고, 앱과 Tornado2의
TCP 연결만 남았다. 이 회차는 그 연결을 **프로그램의 정상 종료 경로로 한 번만
정리**하기 위한 별도 fail-closed 회차다. 현재 상태는 **계획·도우미 검증 완료,
승인 대기**이며, 종료 요청·대화상자 확인·DISCONNECT/BYE는 아직 실행하지 않았다.
## 고정 산출물
| 항목 | 크기 | 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 창 복원은 승인하지 않는다. 사전 조건이 하나라도 달라지거나 결과가 불명확하면 추가 명령 없이 즉시 중단한다.

View File

@@ -1,8 +1,49 @@
# MBNWEB-20260712-M 실제 PGM 검증 계획
이 문서는 Round L의 명령 송신 전 창 상태 실패를 교정한 새 Gate A 회차를 고정한다.
현재 상태는 **계획 생성 완료·승인 대기**다. 앱, CDP, K3D/Tornado2 명령은 아직
실행하지 않았다.
Round M Gate A는 승인 후 정확히 한 번 실행됐으며, **CONNECT 뒤 PREPARE 전 증거
감시기 회귀로 중단**됐다. Round M은 재실행하지 않으며 현재 앱 연결의 정상 종료는
별도 reconciliation 회차와 별도 승인을 사용한다.
## 실행 결과
| 항목 | 값 |
|---|---|
| Gate A 승인 시각 | `2026-07-12T18:58:03.5845976Z` |
| 승인 파일 | 1,485 bytes, `E893A4D8AB5A7AE4B11FDFEEDFAA210FD60F8A983F0A2EB29696561F3E7E6072` |
| 실행 시작 / 종료 | `2026-07-12T18:58:35.8896597Z` / `2026-07-12T18:59:26.1764949Z` |
| 결과 | `OUTCOME_UNKNOWN_DURING_CLEANUP_NONCOMMAND_CLEANUP_INCOMPLETE` |
| 결과 파일 | 32,877 bytes, `019826B736B80A6C0DB696A5DF55DA68432D314B68EC79A4138E64DDB20870FC` |
| 실행 marker | 20,768 bytes, `7CE1B1E854D66833D8F8AF8DEE1A8DC91FAC4C3B9021D7F86B7DD72271E9384D` |
| CONNECT launch budget | 1회 소비, 앱 PID 37916 |
| PREPARE / TAKE IN / NEXT / Page NEXT | `0 / 0 / 0 / 0` |
| DB write / DISCONNECT / retry | `0 / 0 / 0` |
| PREPARE dispatch journal | 생성되지 않음, `prepareMayHaveBeenIssued=false` |
| Network Monitoring 증가분 | `[R] HELLO Hello`, `[S] SUCCESS HELLO Hello`만 존재 |
| PGM | 검은 화면, scene 출력 없음 |
실패 원인은 K3D 명령이나 capability 변경이 아니다. 설치된 앱은 연결 중 1초마다
`requestId`가 없는 정상 push형 `playout-status`를 WebView에 보낸다. Round M의
증거 감시기는 이 상태 알림까지 요청 응답형 terminal로 분류해
`UNCORRELATED_NATIVE_TERMINAL` 위반을 기록했다. 첫 helper의 연결 확인 시점에는
위반이 0이었지만, 다음 helper 전에 수행한 화면 캡처 동안 상태 알림이 들어왔고 기존
감시기 identity 검사가 실패했다. 따라서 PREPARE 버튼과 K3D LOAD/PREPARE 경계에는
도달하지 않았다.
실행기는 정책대로 Gate A를 재시도하거나 앱을 강제 종료하지 않았다. 결과 생성 뒤
round-local Live 설정과 Gate B capability는 제거됐지만 앱 PID 37916, CDP listener
PID 34988과 `127.0.0.1:23210 -> 127.0.0.1:30001` 연결은 증거 보존을 위해 남았다.
정상 종료와 DISCONNECT는 Round M의 남은 예산으로 추정 실행하지 않고, 현재
Network/PGM/process identity를 다시 결박한 별도 reconciliation 승인 뒤 한 번만
수행한다.
후속 회차용 감시기 후보는 Round M 운영 파일을 건드리지 않고 Git 제외 시험 폴더에
작성했다. 후보는 75,460 bytes,
`B495B2CBD554EA1DC47D91CD6D80E31E42D7D0CC938025937FCCE5E4455563FE`이고,
실제 감시 함수로 수행한 8,635 bytes 오프라인 회귀시험
`41F28F3113EC07B3B36FC9238E753FB5B4467B217F416BAADB3918617DDA240B`
1초 status push 4회 뒤 재설치와 9개 fail-closed 음성 사례를 통과했다. 이 후보는
새 계획·새 helper 결박·새 승인을 받기 전까지 라이브 실행에 사용하지 않는다.
| 항목 | 고정값 |
|---|---|