6.6 KiB
MBNWEB-20260712-J 실제 PGM 검증 계획
최종 계획 작성 시각: 2026-07-12 22:47 KST
계획 JSON SHA-256:
8B51E43AFC5F0E330A8DEF3B38DF071B071E5814FC96258AA9505935D1B43956
계획 원본은 Git 제외 로컬 파일
artifacts\pgm-evidence\MBNWEB-20260712-J\round-plan.json이다. 최종 계획을
고정한 시점까지 Round J의 실제 앱·Tornado2 명령은 0건이며, 회차 전용 Live 설정과
일회용 capability도 설치하지 않았다.
기존 Round I 계획 SHA-256
D221841A15593A987FB944648F0ACE0AC5940936AEE16C74DC9B901A2F45B332에
대한 승인은 Round J에서 재사용하지 않는다. Round I은 자동 갱신 상한 위반으로 이미
실패 처리됐고, 이 문서의 새 계획에는 수정된 1.0.5 package와 별도 승인 두 단계가 적용된다.
고정 입력
| 항목 | 값 |
|---|---|
| package source | df60e09884acac2e9cb47d50ba902fa13cf7e154 |
| signed MSIX | 1.0.5.0, x64 |
| MSIX SHA-256 | 1B0BA713619CC3BD7CB3E03D78FD1EB1CEAF49E7D50F5C00DDFB483917BA5437 |
| installed runtime SHA-256 | 168D1FB8D6487C41C8CEAA828B4D9515A38DB3A970F8EB44FA930ABDD577B8E9 |
| installed 289-file manifest | 9234575267F7D1A8A1045246E5128BD755CE9A3976DA83EE00A1AF4ABEE51552 |
| Live 설정 SHA-256 | 63C6F386D73D8740B7B10994668ED14D95C3D7B68025B0DF034C3F18D660E582 |
| 자동 refresh 상한 | maximumAutomaticRefreshesPerTakeIn=1 |
| scene | 5001/page 1, KOSPI 삼성전자 1열판기본 / CURRENT / 005930 |
| cut SHA-256 | 99CE3B689A42D8C42BEB09A86FA10C2D7C1AEF4F50D324D81276C1A1E4C4D8A7 |
| reconnect/retry | 비활성 / 0 |
최종 계획 시점의 대상은 PID 6972, start ticks 639193655349284515, PGM handle
592052, Network Monitoring handle 79286, TCP 30001 listener owner PID 6972 한 개다.
Tornado2 실행 파일은 59,915,776 bytes, SHA-256
BCB192063DF485D0CAD03C91B4698936F0DB9F7B2F19B8EB52DF309A78F313C4,
NotSigned로 고정했다. 이 값 중 하나라도 바뀌면 승인을 재사용하지 않는다.
동결된 자동화
독립 정적 감사 결과 P0/P1은 0건이다. PowerShell 5.1 AST와 Node 구문, 교정된 selector, PREPARE permit, Gate B 이중 permit, terminal correlation, DPAPI capability, config/cut read lease, OutcomeUnknown/no-close, NODE/WebView override 차단을 검증했다.
| 파일 | SHA-256 |
|---|---|
round-j-gate-a.ps1 |
3A5A36EED94C4B85AE580FE61FEF102FE83D208575CD159B389788E3E79C172A |
round-j-gate-a-cdp.mjs |
5B89152ABF688FC6439095B2E7B906E937530BF7E182BCB2C16BD593DA141274 |
round-j-gate-b.ps1 |
D7FD8C40B97AF6BC1C3314D7364EAB0007E66F402135E1F01E81ACA8846C8CAE |
round-j-gate-b.mjs |
BD7102E49B7DF5B11AD774BB32B2CA8EA7506A44E6A7350E205CC8DC1BF9BB6E |
round-j-window-arm.ps1 |
D6A939859424982A32A711F101162796493652335209D11C2F35802954F70798 |
round-j-desktop.ps1 |
1E3ABAE50B1337AEA5CCE05CC8125D04F4D6AA0FC2441FD98381B5165032175A |
round-j-monitor.ps1 |
B1CFEBC4A35347ADE5B1B402641EEA19A6975997C05C2726C74D1F4E72694B30 |
실행 runtime도 Visual Studio 2026 Node v24.12.0
2FFE3ACC0458FDDE999F50D11809BBE7C9B7EF204DCF17094E325D26ACE101D8와
Windows PowerShell 5.1
0FF6F2C94BC7E2833A5F7E16DE1622E5DBA70396F31C7D5F56381870317E8C46의
정확한 절대 경로·크기·해시로 고정했다.
명령 예산과 단계
Gate A는 CONNECT 1회와 PREPARE 5001/page 1 1회만 허용한다. TAKE IN, NEXT, Page NEXT, DB write는 허용하지 않는다. Gate A가 명확한 known-outcome 상태에서 중단될 때만 fresh native/CDP/Tornado 상태를 다시 확인하고 정상 종료에 의한 DISCONNECT 1회를 사용할 수 있다. timeout 또는 모순이면 앱을 닫지 않고 비명령 정리만 한다.
Gate A 성공 후에는 다음 조건을 모두 만족해야 Gate B preflight를 만든다.
gate-a-runtime.json이 exact PREPARED 5001/page 1과 동일 guard nonce를 기록한다.- Gate A 이후 15분 이내이고 계획·source·package·target·config·cut이 그대로다.
- command-free preflight가 Gate A inner guard를 default-disarmed 상태로 복원한다.
- Gate B 승인 파일이 runtime manifest와 preflight 양쪽 SHA-256을 참조한다.
- DPAPI CurrentUser 일회용 capability를 소비하고 두 guard가 같은 permit을 동기 소비한다.
Gate B의 단일 observer는 제어권을 반환하지 않고 TAKE IN 1회, 최초 OnScenePlayed 확인, 자동 갱신 최대 1회, CAPPED 1/1 확인, TAKE OUT All 1회, 정상 종료/DISCONNECT 1회를 수행한다. NEXT, DB write, retry 예산은 모두 0이다.
예상 Network Monitoring multiset
Gate A PREPARE 완료 시 [R] marker는 정확히 39개다.
- HELLO 1, LOAD 5001 1, CHANGE_EFFECT_SET 5001 1, BACKGROUND 5001 1
- BEGIN 1, VALUE_SET 8, VISIBLE 23, QUERY 5001 표시 marker 2, PREPARE 5001 1
- PLAY, STOPAL, UNLOAD, BYE, 다른 scene, NEXT, DB write는 0
Gate B 종료 후 누적 [R] marker는 정확히 117개다.
- HELLO 1, LOAD 5001 1, CHANGE_EFFECT_SET 5001 2, BACKGROUND 5001 3
- BEGIN 3, VALUE_SET 24, VISIBLE 69, QUERY 5001 표시 marker 6, PREPARE 5001 3
- PLAY 2, STOPAL 1, UNLOAD 5001 1, BYE 1
- 의미상 vendor request는 114개이며 다른 scene, NEXT, DB write, retry는 0
Gate B cap 도달 전 누적 PREPARE/PLAY/OnScenePlayed는 3/2/2다. 첫 PLAY는 initial
TAKE IN, 둘째 PLAY는 자동 갱신 한 번이다. 최종 callback을 drain한 뒤
completed=1, maximum=1, limitReached=true, refreshActive=false,
playCompletionPending=false, Web CAPPED · 1/1을 확인해야 한다.
승인 문구
Gate A 승인 문구는 아래 한 문장을 그대로 사용한다. 승인 시각은 15분 이내의 canonical UTC로 별도 기록되며 K3D license가 현재 유효하다는 사용자 확인을 포함한다.
회차 MBNWEB-20260712-J의 계획 SHA-256 8B51E43AFC5F0E330A8DEF3B38DF071B071E5814FC96258AA9505935D1B43956을 승인한다. 현재 K3D 라이선스가 유효함을 확인하며, 현재 PGM 대상 Live CONNECT 1회와 PREPARE 5001 page 1 실행, Gate A가 명확한 known-outcome 상태에서 중단될 때 DISCONNECT 1회를 승인한다. TAKE IN, NEXT, DB write는 아직 승인하지 않는다.
Gate B 문구는 Gate A 성공과 command-free preflight 후에만 사용한다.
회차 MBNWEB-20260712-J의 계획 SHA-256 8B51E43AFC5F0E330A8DEF3B38DF071B071E5814FC96258AA9505935D1B43956을 다시 확인했다. 현재 PGM 대상 TAKE IN 5001 page 1 정확히 1회, OnScenePlayed 확인 후 자동 갱신 최대 1회, TAKE OUT All 정확히 1회와 DISCONNECT 1회를 승인한다. NEXT와 DB write 및 결과 불명확 시 재시도는 승인하지 않는다.
계획·helper·source·package·target 중 하나라도 바뀌거나 승인/preflight/runtime이 15분을 넘으면 해당 승인을 사용하지 않고 새 계획 또는 별도 cleanup 판단으로 돌아간다.