
     j                        d Z ddlmZ ddlZddlZddlZddlZddlm	Z	  e	e
      j                         j                  d   ZddZ edd      Z ed	d
      ZdddZd Zd Zd Zy)u  tests/regression/test_checksum_repair.py — Group 5 (3건).

task-2472 regression: checksum repair 경로 검증.

16. test_checksum_repair_without_chairman_evidence_rejected
17. test_checksum_repair_audit_missing_rejected
18. test_repair_without_verify_consistency_blocks_done
    )annotationsN)Path   c                4   t         |z  }t        j                  j                  | t	        |            }||j
                  
J d|        t        j                  j                  |      }|t        j                  | <   |j
                  j                  |       |S )Nu   spec load 실패: )
WORKTREE	importlibutilspec_from_file_locationstrloadermodule_from_specsysmodulesexec_module)mod_namerelpathspecmods        </home/jay/workspace/tests/regression/test_checksum_repair.py_loadr      s    c>D>>11(CIFD 7T;MdV9TT7
..
)
)$
/CCKKKKC J    state_repair_g5zutils/state_repair.pysilent_corruption_guard_g5z utils/silent_corruption_guard.pyc                D   | dz  dz  }|j                  dd       ||dd}t        j                  t        j                  |dd      j                  d	            j                         }||d
<   || dz  }|j                  t        j                  |dd      d	       |S )u.   올바른 checksum 포함 state 파일 생성..tasksstateT)parentsexist_oktaskctl)task_idr   actorF)	sort_keysensure_asciiutf-8	_checksumz.jsonr   r$   indentencoding)mkdirhashlibsha256jsondumpsencode	hexdigest
write_text)tmp_pathr!   r   	state_dir
state_datachecksum
state_paths          r   _make_valid_state_filer8   "   s    8#g-IOOD4O0$uyIJ~~

:EBII'Rik  'J{y..J$**ZeANY`ar   c                    d}t        | |       t        | dz        }t        j                  |d|dd|       }|d   du sJ d	       d
|d   v s	d|d   v sJ |d   dk(  sJ |d   dk(  sJ y)uC   repair_state() 시 evidence_path 부재 → ok=False (fail-closed).ztask-repair-no-ev-16zchairman_approval_MISSING.jsonchairman
test-actorrecompute_checksumapproved_by_chairmanevidence_pathr"   repair_action	workspaceokFu*   evidence 없으면 repair 거부해야 함r?   reasonu   없음backup_path 
audit_pathN)r8   r   srrepair_state)r3   r!   nonexistent_evresults       r   7test_checksum_repair_without_chairman_evidence_rejectedrK   6   s    $G8W-$DDEN__'$*  F $<5 N"NN fX..(fX>N2NNN- B&&&,2%%%r   c                   d}t        | |       | dz  }|j                  t        j                  ddd      d       t        j
                  j                  }d }|j                  t        j
                  d	|       t        j                  |dt        |      d
d|       }|d   du sJ d       d|d   j                         v sd|d   j                         v sJ |j                  t        j
                  d	|       y)u1   audit jsonl 쓰기 차단 → repair fail-closed.ztask-audit-blocked-17chairman_evidence.jsonr:   2026-05-07T00:00:00Zapproved_bytsr%   r)   c                     ~ ~t        d      )Nu'   디렉토리 read-only — audit 차단)OSError)argskwargss     r   _blocked_writezCtest_checksum_repair_audit_missing_rejected.<locals>._blocked_write_   s    &?@@r   writer;   r<   r=   rB   Fu.   audit 기록 실패 → repair ok=False 필수auditrC   zfail-closedN)r8   r2   r.   r/   rG   osrW   setattrrH   r   lower)r3   monkeypatchr!   evidence_fileoriginal_os_writerV   rJ   s          r   +test_checksum_repair_audit_missing_rejectedr_   P   s   %G8W- 77M

:5KLM   A w7__'-(*  F $<5 R"RR fX&,,..-6(CSCYCYC[2[[[ w(9:r   c                   d}t        | |      }t        j                  |j                  d            }d|d<   |j	                  t        j
                  |dd      d       | d	z  }|j	                  t        j
                  d
dd      d       t        j                  |d
t        |      dd|       }|d   du s
J d|        | dz  dz  d| z  }|j                         sJ d       |j                         sJ d       t        j                  ||       }|d   du s
J d|        |j                         rJ d       y)ua   repair 성공 후 verify_consistency 미호출 → .verify-pending 마커 잔존 → done 차단.ztask-verify-pending-18r%   r)   HUMAN_APPROVEDr   Fr   r'   rM   r:   rN   rO   r;   r<   r=   rB   Tu   repair 자체가 실패함: r   z.verify-pending-u0   .verify-pending 마커가 생성되지 않았음ue   verify_consistency 미호출 시 .verify-pending 마커가 남아있어야 함 → done 차단 조건)rA   u   verify_consistency 실패: u8   verify_consistency 통과 후 마커 제거되어야 함N)r8   r.   loads	read_textr2   r/   rG   rH   r   existsverify_consistency)r3   r!   r7   r5   r]   repair_resultmarker_path	vc_results           r   2test_repair_without_verify_consistency_blocks_doneri   z   s   &G'':J J00'0BCJ*Jw$**ZeANY`a 77M

:5KLM   OO'-(* $ M $&V*F}o(VV& X%/4DWI2NNKS!SS  o
 %%g%BIT?d"M&A)$MM"!!#_%__##r   )r   r   r   r   )FAILED)r3   r   r!   r   r   r   returnr   )__doc__
__future__r   r,   importlib.utilr   r.   r   pathlibr   __file__resolver   r   r   rG   scgr8   rK   r_   ri    r   r   <module>rt      st    #    
 >!!#++A. 56(*LM(&4#;T,`r   