
    oiK                         d Z ddlZddlZdZg dZg dZdee   deee	ef      fdZ
dee   d	e	defd
ZddededefdZdedefdZy)u   
critical_gap.py - 보고서 CRITICAL 이슈 미수정 검증 verifier

보고서에서 CRITICAL 이슈가 보고되었으나 수정이 확인되지 않으면 FAIL.
    Nz"/home/jay/workspace/memory/reports)CRITICALcriticalu   심각u	   블로커)u   수정 완료u   해결fixedresolvedlinesreturnc                     g }t        | d      D ]7  \  }}t        D ])  }||v s|j                  ||j                         f        7 9 |S )u   
    보고서 줄 목록에서 CRITICAL 키워드가 포함된 줄 탐지.

    Returns:
        [(line_number, line_content), ...] - 1-based line numbers
       )start)	enumerateCRITICAL_KEYWORDSappendstrip)r   foundilinekws        ?/home/jay/workspace/teams/dev6/qc/verifiers.bak/critical_gap.py_detect_critical_linesr      sZ     $&EU!, 4# 	BTza./	
 L    critical_line_numc                 t    | |d D ]0  }t         D ]%  }|j                         |j                         v s$  y 2 y)u  
    critical_line_num 이후 줄에서 수정 확인 키워드 탐지.

    Args:
        lines: 전체 줄 목록
        critical_line_num: CRITICAL 이슈가 발견된 줄 번호 (1-based)

    Returns:
        True if resolved keyword found after critical_line_num
    NTF)RESOLVED_KEYWORDSlower)r   r   r   r   s       r   _detect_resolved_afterr   #   sG     '() # 	BxxzTZZ\)	 r   task_idreport_pathc                 v   | sddgdS |r|}n't         j                  j                  t        |  d      }t         j                  j	                  |      s	dd| gdS 	 t        |dd      5 }|j                         }d	d	d	       j                         }|r|j                         sddgdS t        |      }|s	dd| gdS g }	g }
|D ]d  \  }}t        ||      }t        |      }|r|	j                  d| d|        7|	j                  d| d|        |
j                  d| d|        f |
r$|	j!                  ddt#        |
       d       d|	dS |	j!                  ddt#        |       d       d|	dS # 1 sw Y   xY w# t        $ r)}dd
t        |      j                   d| gdcY d	}~S d	}~ww xY w)u  
    보고서에서 CRITICAL 이슈 확인 + 수정 여부 검증.

    보고서 경로: /home/jay/workspace/memory/reports/{task_id}.md
    - CRITICAL 이슈가 있는데 수정 확인이 없으면 FAIL
    - CRITICAL 이슈가 있고 수정 확인도 있으면 PASS
    - CRITICAL 이슈가 없으면 PASS (이슈 없음)
    - 보고서 파일 없으면 SKIP
    - 빈 보고서 → PASS

    Returns:
        {"status": "PASS"|"FAIL"|"WARN"|"SKIP", "details": [...]}
    SKIPzNo task_id provided)statusdetailsz.mdzReport not found: rzutf-8)encodingNzFailed to read report: z: PASSu&   Report is empty — no CRITICAL issuesz$No CRITICAL issues found in report: zCRITICAL (line z) RESOLVED: z) UNRESOLVED: zline r   u	   FAIL — z CRITICAL issue(s) not resolvedFAILu	   PASS — z CRITICAL issue(s) all resolved)ospathjoinDEFAULT_REPORTS_DIRexistsopenreadOSErrortype__name__
splitlinesr   r   r   _extract_issue_descriptionr   insertlen)r   r   kwargsr'   fcontenter   critical_linesr!   
unresolvedline_numline_contentr   
issue_descs                  r   verifyr=   6   s     .C-DEE ww||/G9CA 77>>$,TF34
 	

$g. 	!ffhG	  E  .V-WXX ,E2N>tfEF
 	
 GJ"0 @,)%:/=
NN_XJl:,OPNN_XJnZLQRhZr*>?@ qIc*o%66UVW W55NN1	#n"5!66UVW11S	 	 
1$q'2B2B1C2aSIJ
 	

s6   F ,E:=F :F?F 	F8F3-F83F8r   c                     t        j                  dd|       j                         }t        |      dkD  r|dd dz   S |r|S | dd S )uA   CRITICAL 이슈 줄에서 설명 텍스트 추출 (최대 80자).z^[#\-*\d\.\s]+ P   Nu   …)resubr   r3   )r   cleaneds     r   r1   r1      sP     ff&D1779G
7|bs|e##7,49,r   )r?   )__doc__r&   rA   r)   r   r   liststrtupleintr   boolr   dictr=   r1    r   r   <module>rL      s    
 	:  D  E $s) U38_0E  $s)   &I2C I2c I2T I2X-S -S -r   