
    -mj                         d Z ddlZddlZddlZddlmZ ddlZ ee      j                         j                  d   Zd Zd Zd Zd Zd	 Zy)
u<  
test_task_md_preservation_2569.py
MT-T1: RC-4 + AD-4 검증
  - protection-list.json에 task 관련 경로 포함
  - cleanup-workspace.py is_protected() 정상 동작
  - file_cleanup.py SafetyChecker.is_protected() 정상 동작
  - dispatch/__init__.py에 intent-to-add 호출 4회 이상 존재 (정적 검증)
    N)Path   c                      t         dz  dz  } t        j                  j                  d|       }t        j                  j	                  |      }|j
                  j                  |       |S )u3   importlib으로 cleanup-workspace.py 동적 로드.scriptszcleanup-workspace.pycleanup_workspace)	WORKSPACE	importlibutilspec_from_file_locationmodule_from_specloaderexec_module)module_pathspecmods      2tests/regression/test_task_md_preservation_2569.py_load_cleanup_workspacer      sT    i'*@@K>>112E{SD
..
)
)$
/CKKC J    c                  D   t         dz  dz  dz  } | j                         s
J d|         t        j                  | j	                  d            }|j                  dg       }g d}|D ]6  }|j                  d	      t        fd
|D              }|r+J d| d|         y)u`   memory/specs/protection-list.json에 task 관련 보호 경로가 모두 포함되어야 한다.memoryspecszprotection-list.jsonu   protection-list.json 없음: utf-8encodingprotected_paths)zmemory/tasks/zmemory/plans/tasks/zmemory/reports/zmemory/specs//c              3      K   | ]:  }|j                  d       k(  xs  |j                  d       j                         < yw)r   N)rstrip
startswith).0entry
normalizeds     r   	<genexpr>z;test_protection_list_includes_task_paths.<locals>.<genexpr>1   sC      
 LL+Wu||C/@/K/KJ/WW
s   A Au)   protection-list.json protected_paths에 'u   ' 없음. 현재 목록: N)r   existsjsonloads	read_textgetr   any)
plist_pathdatar   required_prefixesrequiredfoundr"   s         @r   (test_protection_list_includes_task_pathsr/       s    X%/2HHJL"?
| LL::j**G*<=D HH%6;O & 

__S)
 
(
 
  	
7z B-.0	
u

r   c                      t               } d| _        t        dz  dz  dz  }| j                  |t              }|du sJ d| d       y)uQ   cleanup-workspace.py is_protected()가 memory/tasks/task-9999.md → True 반환.Nr   taskstask-9999.mdTu   is_protected()가 um   에 대해 False를 반환했습니다. protection-list.json 또는 is_protected() 구현을 확인하세요.)r   _PROTECTION_CACHEr   is_protected)cwtask_md_pathresults      r   /test_cleanup_workspace_is_protected_for_task_mdr8   =   s^     
!	"BBx''1NBL__\95FT> 
\N +P 	P>r   c                     t        t        dz        } | t        j                  vr t        j                  j	                  d|        ddl}|j                  t              }t        dz  dz  dz  }|j                  |      }|du sJ d| d	       y)
uP   file_cleanup.py SafetyChecker.is_protected()가 memory/tasks/task-X.md → True.r   r   Nr   r1   r2   Tu    SafetyChecker.is_protected()가 u'   에 대해 False를 반환했습니다.)strr   syspathinsertfile_cleanupSafetyCheckerr4   )scripts_dirr>   checkerr6   r7   s        r   *test_file_cleanup_is_protected_for_task_mdrB   M   s    i)+,K#((";'((3Gx''1NBL!!,/FT> 
*<.8_`>r   c                      t         dz  dz  } | j                         s
J d|         | j                  d      }|j                  d      }|dk\  sJ d| d	       y
)ue   dispatch/__init__.py에 'intent-to-add' 문자열이 4회 이상 등장해야 한다 (정적 검증).dispatchz__init__.pyu   dispatch/__init__.py 없음: r   r   zintent-to-add   u7   dispatch/__init__.py에 'intent-to-add' 등장 횟수: uD    (최소 4회 필요). RC-4 intent-to-add 구현을 확인하세요.N)r   r$   r'   count)dispatch_initcontentrF   s      r   "test_dispatch_intent_to_add_calledrI   _   sv    
*]:M!R%B=/#RR!%%w%7GMM/*EA: 
A% I8 	8:r   )__doc__importlib.utilr	   r%   r;   pathlibr   pytest__file__resolveparentsr   r   r/   r8   rB   rI    r   r   <module>rR      sQ      
  N""$,,Q/	

: $
r   