
    i!                    8   d Z ddlm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d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej<                  dej>                        Z d Z!d Z"y)u+  tests/regression/test_legacy_compat_2487.py — task-2487 회귀 테스트 (legacy 호환).

V2 패턴 도입 이후에도 기존 단순 ID(task-1234)와 dot-phase(task-1234.5)가
파괴되지 않는지 검증한다. 회장 명시 합격 조건.

헤임달(개발2팀 테스터) 작성 / task-2487.
    )annotationsN)Path   c                <   t         |z  }t        j                  j                  | t	        |            }||j
                  t        d|       t        j                  j                  |      }|t        j                  | <   |j
                  j                  |       |S )Nzcannot load spec for )	WORKSPACE	importlibutilspec_from_file_locationstrloaderImportErrormodule_from_specsysmodulesexec_module)mod_namefile_rel	file_pathspecmodules        Y/home/jay/workspace/.worktrees/task-2487-dev2/tests/regression/test_legacy_compat_2487.py_load_moduler      s    H$I>>11(C	NKD|t{{*1)=>>^^,,T2F"CKKKKF#M    tip_2487_legacyzutils/task_id_parser.pyc                 6    t         j                  d      du sJ y)uW   기존 단순 task-1234 ID가 V2 parser에서 valid로 인식된다 (미파괴 확인).	task-1234TNtipis_valid_task_id r   r   test_legacy_base_id_validr!   %   s    ,444r   c                 6    t         j                  d      du sJ y)u0   큰 번호 task-99999 도 valid로 인식된다.z
task-99999TNr   r    r   r    test_legacy_base_id_large_numberr#   *   s    -555r   c                 6    t         j                  d      du sJ y)u2   단자리 번호 task-1 도 valid로 인식된다.ztask-1TNr   r    r   r    test_legacy_base_id_small_numberr%   /   s    )T111r   c                 D    t         j                  d      } | du sJ d       y)u   dot phase 'task-1234.5'는 V2 strict 패턴에서 invalid (언더스코어 아님).
    이 동작은 의도된 것으로, dot phase는 V1 호환 경로에서 처리해야 한다.task-1234.5Fui   task-1234.5는 V2 패턴에서 False여야 함. True이면 dot-phase가 V2로 흡수됨 — 확인 필요Nr   results    r   %test_legacy_dot_phase_not_valid_in_v2r*   ;   s,     !!-0F U? 
s?r   c                 N    t         j                  d      } | d| v s
J d|        y)u   _TASK_ID_LOOSE_PATTERN 으로는 dot phase 내 base('task-1234')가 추출된다.
    실제 filename/branch 파이프라인에서 dot-phase 처리가 완전히 망가지지 않음을 검증.task-1234.5.mdNr   u8   task-1234.5.md 에서 base task-1234 추출 실패: got r   extract_task_id_from_filenamer(   s    r   *test_legacy_dot_phase_loose_pattern_searchr/   G   s<     ../?@F+"7 
B6*M7"7r   c                 N    t         j                  d      } | d| v s
J d|        y)u@   'task/task-1234.5-dev1' 브랜치에서 base ID가 추출된다.ztask/task-1234.5-dev1Nr   u?   task/task-1234.5-dev1 에서 base task-1234 추출 실패: got r   extract_task_id_from_branchr(   s    r   -test_legacy_dot_phase_branch_base_extractabler3   R   s:    ,,-DEF+"7 
I&T7"7r   c                 L    t         j                  d      } | d   
J d|         y)uL   parse_task_id_v2('task-1234.5')는 모든 필드 None (V2 패턴 불일치).r'   baseNu#   dot phase가 V2 base로 파싱됨: r   parse_task_id_v2outs    r   ,test_legacy_parse_returns_none_for_dot_phaser:   _   s/    


}
-Cv;K"EcU KKr   c                 ^    t         j                  d      } | d   dk(  sJ | d   J | d   J y)uC   parse_task_id_v2('task-1234')는 base='task-1234'를 정상 반환.r   r5   phaseNretryr6   r8   s    r   test_legacy_parse_v2_base_okr>   e   sD    


{
+Cv;+%%%w<w<r   c                 V    t         j                  d      } | d   dk(  sJ | d   dk(  sJ y)u@   V2 언더스코어 phase 'task-1234_1.2'는 정상 파싱된다.task-1234_1.2r5   r   r<   z_1.2Nr6   r8   s    r   (test_legacy_parse_v2_phase_underscore_okrA   m   s6    



/Cv;+%%%w<6!!!r   c                    ddl } ddl}t        dd      }d}| j                         }|j                  j                  |d      }t        |dd	      5 }|j                  |       ddd       	 |j                  |      }|d
   d|d
   v sJ d|d
          |j                  |       |j                  |       y# 1 sw Y   WxY w# |j                  |       |j                  |       w xY w)u   report_parser가 'task-1234.5.md' basename 에서 최소한 task-1234를 추출한다.
    V2 regex는 dot phase 미지원이지만 basename fallback이 작동해야 한다.r   Nrp_legacy_2487zreport_parser.pyu   # 완료 보고서

내용r,   wzutf-8)encodingtask_idr   u@   report_parser가 task-1234.5.md에서 잘못된 task_id 반환: )tempfileosr   mkdtemppathjoinopenwriteparse_reportunlinkrmdir)rG   rH   rpcontenttmp_dirtmpfr)   s           r   ,test_legacy_report_parser_dot_phase_basenamerV   y   s     	&(:	;B,G G
'',,w 0
1C	c3	) Q	
%)(&"33 RSYZcSdRgh3
 			#
  			#
s   B9,*C 9C$C)c                 L    t         j                  d      } | dk(  s
J d|        y)u@   'task-1234.md' → 'task-1234' 추출 (기존 동작 미파괴).ztask-1234.mdr   got Nr-   r(   s    r   #test_legacy_extract_filename_simplerY      s,    ..~>F[ 3D
"33 r   c                 L    t         j                  d      } | dk(  s
J d|        y)u=   'task-1234+1.md' → 'task-1234+1' 추출 (V2 신규 동작).ztask-1234+1.mdtask-1234+1rX   Nr-   r(   s    r   %test_legacy_extract_filename_v2_retryr\      s-    ../?@F]"5d6*$55"r   c                 L    t         j                  d      } | dk(  s
J d|        y)uA   'task-1234_1.2.md' → 'task-1234_1.2' 추출 (V2 신규 동작).ztask-1234_1.2.mdr@   rX   Nr-   r(   s    r   %test_legacy_extract_filename_v2_phaser^      s-    ../ABF_$7VJ&77$r   c                 L    t         j                  d      } | dk(  s
J d|        y)u@   'task/task-1234-dev1' → 'task-1234' (기존 동작 미파괴).ztask/task-1234-dev1r   rX   Nr1   r(   s    r   !test_legacy_extract_branch_simpler`      s-    ,,-BCF[ 3D
"33 r   c                 L    t         j                  d      } | dk(  s
J d|        y)u=   'task/task-1234+1-dev1' → 'task-1234+1' (V2 신규 동작).ztask/task-1234+1-dev1r[   rX   Nr1   r(   s    r   #test_legacy_extract_branch_v2_retryrb      s-    ,,-DEF]"5d6*$55"r   uO   ^(?:task-\d+(?:_\d+\.\d+)?(?:_[a-z])?(?:\+\d+)?|Task\s+\d+[\.\d]*)\s*[:：]?\s*c                 j    t         j                  dd      j                         } | dk(  s
J d|        y)uR   대시보드 prefix 제거가 'task-1234: 제목'을 정상 처리한다 (legacy). u   task-1234: 제목   제목rX   N_DASH_PREFIX_RE_LEGACYsubstripr(   s    r   'test_dashboard_prefix_legacy_base_striprj      s8    #'',?@FFHFX0fZ00r   c                 j    t         j                  dd      j                         } | dk(  s
J d|        y)ud   'Task 1234.5: 제목' (숫자.숫자 dot 형식)을 prefix 제거 정규식이 처리할 수 있다.rd   u   Task 1234.5: 제목re   rX   Nrf   r(   s    r   +test_dashboard_prefix_dot_phase_title_striprl      s:     $'',ABHHJFX0fZ00r   )r   r   r   r   )#__doc__
__future__r   importlib.utilr   rer   pathlibr   __file__resolveparentsr   r   r   r!   r#   r%   r*   r/   r3   r:   r>   rA   rV   rY   r\   r^   r`   rb   compile
IGNORECASErg   rj   rl   r    r   r   <module>rw      s    #  	 
 N""$,,Q/	 $&?@5
6
2	L ":46846 $VMM 11r   