
     jo                        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d Zy)u_  tests/state_machine/test_state_repair.py — Group 2 (4건).

task-2472 regression: 수동 state 수정 차단 + checksum mismatch 검증.

5. test_state_json_direct_modification_checksum_mismatch
6. test_failed_to_human_approved_manual_transition_rejected
7. test_checksum_mismatch_blocks_done_or_merge
8. test_state_repair_without_evidence_rejected
    )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/state_machine/test_state_repair.py_loadr      s    c>D>>11(CIFD 7T;MdV9TT7
..
)
)$
/CCKKKKC J    state_repair_modzutils/state_repair.pysilent_corruption_guard_g2z 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 )u4   올바른 checksum이 포함된 state 파일 생성.z.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_filer7   #   s    8#g-IOOD4O0J
 ~~

:EBII'Rik  'J{y..J$**ZeANY`ar   c                   d}t        | |d      }t        j                  ||       }|d   du sJ d       t        j                  |j                  d	            }d
|d<   |j                  t        j                  |dd      d	       t        j                  ||       }|d   du sJ |d   du sJ |d   du sJ |d   du sJ d       t        d |d   D              sJ y)u>   state JSON 직접 수정 후 inspect → checksum_match=False.ztask-chksum-testRUNNINGr   	workspacechecksum_matchTu*   초기 상태는 checksum 일치해야 함r$   r(   HUMAN_APPROVEDr   Fr   r&   exists
json_validchecksum_presentu4   수동 편집 후 checksum mismatch 감지해야 함c              3  $   K   | ]  }d |v  
 yw)zchecksum mismatchN ).0issues     r   	<genexpr>zHtest_state_json_direct_modification_checksum_mismatch.<locals>.<genexpr>N   s     J"e+Js   issuesN)	r7   srinspect_stater-   loads	read_textr1   r.   any)r2   r    r6   resultr4   s        r   5test_state_json_direct_modification_checksum_mismatchrN   :   s    G''KJ g:F"#t+Y-YY+ J00'0BCJ*Jw$**ZeANY`a g:F(t###,4'''$%---"#u,d.dd,J9IJJJJr   c                L   d}t        | |d      }t        j                  |j                  d            }d|d<   |j	                  t        j
                  |dd	
      d       t        j                  ||       }|d   du sJ d       d|d   v s	d|d   v sJ |d   d   du sJ y)uH   taskctl에서 FAILED → HUMAN_APPROVED 직접 전이 시도 → 차단.ztask-transition-testFAILEDr:   r$   r(   r>   r   Fr   r&   r;   oku<   checksum mismatch 상태에서 state 검증 차단해야 함mismatchreasonu   수동 편집detailr=   N)r7   r-   rJ   rK   r1   r.   scgcheck_state_file_present)r2   r    r6   r4   rM   s        r   8test_failed_to_human_approved_manual_transition_rejectedrW   U   s    
 %G''JJ J00'0BCJ*Jw$**ZeANY`a ))'X)FF$<5 `"`` ))_x@P-PPP(,-666r   c                   d}t        | |d      }t        j                  |j                  d            }d|d<   |j	                  t        j
                  |dd	
      d       t        j                  ||       }|d   du sJ d       d|d   v s	d|d   v sJ t        j                  ||       }|d   du sJ t        |d         dkD  sJ y)uU   checksum mismatch 상태에서 check_state_file_present → ok=False → done 차단.ztask-mismatch-blockVERIFIEDr:   r$   r(   injected_by_attackerextra_fieldFr   r&   r;   rQ   u.   checksum mismatch → done/merge 차단 필수rR   rS   zfail-closedr=   rG   r   N)r7   r-   rJ   rK   r1   r.   rU   rV   rH   rI   len)r2   r    r6   r4   guard_resultinspects         r   +test_checksum_mismatch_blocks_done_or_merger_   n   s    #G''LJ J00'0BCJ 6J}$**ZeANY`a //8/LL&X(XX&h//=LQYDZ3ZZZ w(;G#$---wx !A%%%r   c                    d}t        | |d       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 y)uF   repair_state() 호출 시 evidence_path 파일 없음 → fail-closed.ztask-repair-no-evrP   r:   zno_such_evidence.jsonchairmanz
test-actorrecompute_checksum)approved_by_chairmanevidence_pathr!   repair_actionr<   rQ   Fu-   evidence 없이 repair → fail-closed 필수rd   rS   u   없음backup_path N)r7   r   rH   repair_state)r2   r    nonexistent_evidencerM   s       r   +test_state_repair_without_evidence_rejectedrj      s    !G8WH= x*AAB__'**  F $<5 Q"QQ fX..(fX>N2NNN- B&&&r   )r   r   r   r   )r9   )r2   r   r    r   r   r   returnr   )__doc__
__future__r   r+   importlib.utilr   r-   r   pathlibr   __file__resolver   r   r   rH   rU   r7   rN   rW   r_   rj   rC   r   r   <module>rr      sx    #    
 >!!#++A. 67(*LM.K672&2'r   