From 55ca16d5e0b2d541ce55d9b895d9a1342e00b594 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Mon, 13 Jul 2026 05:25:31 +0900 Subject: [PATCH] docs: record round M outcome and reconciliation gate --- ...ECONCILIATION_PLAN_MBNWEB-20260712-M-R1.md | 80 +++++++++++++++++++ .../LIVE_VALIDATION_PLAN_MBNWEB-20260712-M.md | 45 ++++++++++- 2 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 docs/LIVE_RECONCILIATION_PLAN_MBNWEB-20260712-M-R1.md diff --git a/docs/LIVE_RECONCILIATION_PLAN_MBNWEB-20260712-M-R1.md b/docs/LIVE_RECONCILIATION_PLAN_MBNWEB-20260712-M-R1.md new file mode 100644 index 0000000..6986527 --- /dev/null +++ b/docs/LIVE_RECONCILIATION_PLAN_MBNWEB-20260712-M-R1.md @@ -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 창 복원은 승인하지 않는다. 사전 조건이 하나라도 달라지거나 결과가 불명확하면 추가 명령 없이 즉시 중단한다. diff --git a/docs/LIVE_VALIDATION_PLAN_MBNWEB-20260712-M.md b/docs/LIVE_VALIDATION_PLAN_MBNWEB-20260712-M.md index c185776..3f43fec 100644 --- a/docs/LIVE_VALIDATION_PLAN_MBNWEB-20260712-M.md +++ b/docs/LIVE_VALIDATION_PLAN_MBNWEB-20260712-M.md @@ -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 결박·새 승인을 받기 전까지 라이브 실행에 사용하지 않는다. | 항목 | 고정값 | |---|---|