
    {j^                        d Z ddlZddlZddlmZ  ee      j                         j                  d   Z	e	Z
dedefdZ ede
d	z  d
z  dz  dz        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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,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8y)8u2  
test_critical_gap_false_positive_2506.py — task-2506 회귀 테스트

회장 명시 15건 (10 false-positive + 5 true-positive) 검증.
- False-positive: critical_gap fix 후 PASS여야 함
- True-positive: 기존 룰 유지 — FAIL이어야 함

수정 대상: teams/shared/verifiers/critical_gap.py
    N)Path   namepathc                    t         j                  j                  | |      }||j                  t	        d|       t         j                  j                  |      }|t        j                  | <   |j                  j                  |       |S )NzFailed to load module spec for )		importlibutilspec_from_file_locationloaderImportErrormodule_from_specsysmodulesexec_module)r   r   specmodules       9tests/regression/test_critical_gap_false_positive_2506.py_load_moduler      sr    >>11$=D|t{{*;D6BCC^^,,T2FCKKKKF#M    critical_gap_t2506teamsshared	verifierszcritical_gap.pyc                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uS   FP1: '- 우선순위: critical' 단독 줄 → PASS (메타 정보, 이슈 아님).u   - 우선순위: critical
ztask-fp1.mdutf-8encodingztask-fp1report_pathstatusPASSu>   FP1 메타 우선순위 라벨이 이슈로 오인식: status=
, details=detailsN
write_textcritical_gapverifystrgettmp_pathbodyreportresults       r   test_fp_priority_label_onlyr/   (   s}    'D%F
dW-  V EF(v% 
HPXIYHZZdekeoeopyezd{|%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)un   FP2: '## task: [CRITICAL] 20개 컨셉' 헤더 → PASS (태스크 제목 우선순위 표기, 이슈 아님).u7   ## task: [CRITICAL] 20개 컨셉
본문 내용 없음.
ztask-fp2.mdr   r   ztask-fp2r   r    r!   uH   FP2 태스크 헤더 우선순위 표기가 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   $test_fp_task_priority_bracket_headerr1   3   s    FD%F
dW-  V EF(v% 
RSYZbScRddnouoyoy  {D  pE  oF  	G%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u_   FP3: '1. critical path 분석' 번호 목록 항목 → PASS (방법론 용어, 이슈 아님).u,   1. critical path 분석
2. 일정 최적화
ztask-fp3.mdr   r   ztask-fp3r   r    r!   uB   FP3 critical path 방법론 용어가 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   test_fp_critical_path_in_listr3   >   s    ;D%F
dW-  V EF(v% 
LVT\M]L^^hioisist}i~h  	A%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uw   FP4: SCQA 프레임 상황절 내 'critical chain 중복 투입 문제' → PASS (상황 묘사, 이슈 마커 아님).u3   ### S 상황
- critical chain 중복 투입 문제
ztask-fp4.mdr   r   ztask-fp4r   r    r!   uA   FP4 SCQA 상황절 critical chain이 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   test_fp_critical_chain_in_scqar5   I   s}    BD%F
dW-  V EF(v% 
KFS[L\K]]ghnhrhrs|h}g~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)un   FP5: 보고서 첫줄 '- 작업 레벨: critical' 단독 → PASS (디스패치 레벨 메타, 이슈 아님).u;   - 작업 레벨: critical
작업이 완료되었습니다.
ztask-fp5.mdr   r   ztask-fp5r   r    r!   u?   FP5 작업 레벨 메타 라벨이 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   *test_fp_dispatch_level_critical_first_liner7   T   s}    JD%F
dW-  V EF(v% 
I&QYJZI[[eflfpfpqzf{e|}%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u}   FP6: '## [CRITICAL]' 대괄호 prefix만 있는 헤더 (이슈 본문 없음) → PASS (분류 헤더, 본문 이슈 없음).u   ## [CRITICAL]
작업 완료.
ztask-fp6.mdr   r   ztask-fp6r   r    r!   uF   FP6 분류 헤더 [CRITICAL]이 미해결 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   $test_fp_bracket_critical_only_headerr9   _   s    ,D%F
dW-  V EF(v% 
PQWX`QaPbblmsmwmw  yB  nC  mD  	E%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)um   FP7: '이 작업은 critical thinking이 필요하다' 평문 문장 → PASS (일반 용어, 이슈 아님).u@   이 작업은 critical thinking이 필요하다.
분석 완료.
ztask-fp7.mdr   r   ztask-fp7r   r    r!   uE   FP7 'critical thinking' 일반 문구가 이슈로 오인식: status=r"   r#   Nr$   r*   s       r    test_fp_critical_thinking_phraser;   j   s    OD%F
dW-  V EF(v% 
OPVW_P`Oaaklrlvlv  xA  mB  lC  	D%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)ua   FP8: '- level: critical' 메타 라벨 → PASS (severity와 다른 level 필드, 이슈 아님).u(   - level: critical
작업 정상 완료.
ztask-fp8.mdr   r   ztask-fp8r   r    r!   uC   FP8 'level: critical' 메타 라벨이 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   test_fp_level_critical_metar=   u   s    7D%F
dW-  V EF(v% 
MfU]N^M__ijpjtjtu~j  jA  	B%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)ue   FP9: 'dispatch level critical' 명시 → PASS (디스패치 시스템 레벨 태그, 이슈 아님).u5   dispatch level critical
모든 항목 처리 완료.
ztask-fp9.mdr   r   ztask-fp9r   r    r!   uD   FP9 'dispatch level critical' 태그가 이슈로 오인식: status=r"   r#   Nr$   r*   s       r   &test_fp_dispatch_level_critical_inliner?      s    DD%F
dW-  V EF(v% 
NvV^O_N``jkqkukuv  lA  kB  	C%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)ui   FP10: '발사 우선순위: critical' → PASS (발사/배포 우선순위 메타 정보, 이슈 아님).u4   발사 우선순위: critical
배포 준비 완료.
ztask-fp10.mdr   r   z	task-fp10r   r    r!   uK   FP10 '발사 우선순위: critical' 메타가 이슈로 오인식: status=r"   r#   Nr$   r*   s       r    test_fp_launch_priority_criticalrA      s    CD&F
dW-  #f+ FF(v% 
UV\]eVfUggqrxr|r|  ~G  sH  rI  	J%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)ub   TP1: '## CRITICAL 이슈 1건 발견\n- token 누락' → FAIL (실제 이슈 헤더 + 미해결).u.   ## CRITICAL 이슈 1건 발견
- token 누락
ztask-tp1.mdr   r   ztask-tp1r   r    FAILuF   TP1 CRITICAL 이슈 헤더 + 미해결이 감지되지 않음: status=r"   r#   Nr$   r*   s       r   (test_tp_critical_issue_section_with_bodyrD      s    =D%F
dW-  V EF(v% 
PQWX`QaPbblmsmwmw  yB  nC  mD  	E%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uc   TP2: '## 발견된 이슈\n- severity: critical' → FAIL (severity는 이슈 자체를 나타냄).u)   ## 발견된 이슈
- severity: critical
ztask-tp2.mdr   r   ztask-tp2r   r    rC   u?   TP2 'severity: critical' 이슈가 감지되지 않음: status=r"   r#   Nr$   r*   s       r   /test_tp_severity_critical_meta_in_issue_sectionrF      s}    8D%F
dW-  V EF(v% 
I&QYJZI[[eflfpfpqzf{e|}%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u`   TP3: '## 미해결 항목\n- CRITICAL: 누락' → FAIL (CRITICAL 리스트 마커 + 미해결).u'   ## 미해결 항목
- CRITICAL: 누락
ztask-tp3.mdr   r   ztask-tp3r   r    rC   u=   TP3 'CRITICAL: 누락' 마커가 감지되지 않음: status=r"   r#   Nr$   r*   s       r   #test_tp_unresolved_in_issue_sectionrH      s|    6D%F
dW-  V EF(v% 
GxHXGYYcdjdndnoxdycz{%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uf   TP4: '## 발견된 이슈\n- ![security-critical] 발견' → FAIL (보안 배지 마커 + 미해결).u2   ## 발견된 이슈
- ![security-critical] 발견
ztask-tp4.mdr   r   ztask-tp4r   r    rC   uA   TP4 '![security-critical]' 배지가 감지되지 않음: status=r"   r#   Nr$   r*   s       r   test_tp_security_critical_badgerJ      s}    AD%F
dW-  V EF(v% 
KFS[L\K]]ghnhrhrs|h}g~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uu   TP5: '## CRITICAL 이슈\n- 보안 누락' (RESOLVED 마커 없음) → FAIL (이슈 있으나 해결 확인 없음).u#   ## CRITICAL 이슈
- 보안 누락
ztask-tp5.mdr   r   ztask-tp5r   r    rC   uE   TP5 CRITICAL 이슈 + RESOLVED 없음이 감지되지 않음: status=r"   r#   Nr$   r*   s       r   #test_tp_critical_no_resolved_markerrL      s    2D%F
dW-  V EF(v% 
OPVW_P`Oaaklrlvlv  xA  mB  lC  	D%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uL   ZC1: '- HIGH/CRITICAL 0건' → PASS (0건 명시, 미해결 이슈 아님).)   ## 발견된 이슈
- HIGH/CRITICAL 0건
ztask-zc1.mdr   r   ztask-zc1r   r    r!   u8   ZC1 '0건' 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r    test_zc_high_critical_zero_countrO      s|    8D%F
dW-  V EF(v% 
B6(CSBTT^_e_i_ijs_t^uv%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uZ   ZC2: '- HIGH/CRITICAL 신규 0건' → PASS (신규 0건 명시, 미해결 이슈 아님).u0   ## 발견된 이슈
- HIGH/CRITICAL 신규 0건
ztask-zc2.mdr   r   ztask-zc2r   r    r!   u?   ZC2 '신규 0건' 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   $test_zc_high_critical_new_zero_countrQ      s}    ?D%F
dW-  V EF(v% 
I&QYJZI[[eflfpfpqzf{e|}%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uW   ZC3: '- 신규 HIGH/CRITICAL 없음' → PASS (부재 명시, 미해결 이슈 아님).u2   ## 발견된 이슈
- 신규 HIGH/CRITICAL 없음
ztask-zc3.mdr   r   ztask-zc3r   r    r!   u:   ZC3 '없음' 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_zc_new_high_critical_nonerS      s|    AD%F
dW-  V EF(v% 
DVHEUDVV`agakakluav`wx%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)ug   ZC4: '- 신규 HIGH/CRITICAL 없습니다' → PASS (부재 명시 격식체, 미해결 이슈 아님).u8   ## 발견된 이슈
- 신규 HIGH/CRITICAL 없습니다
ztask-zc4.mdr   r   ztask-zc4r   r    r!   u@   ZC4 '없습니다' 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   %test_zc_new_high_critical_none_formalrU      s}    GD%F
dW-  V EF(v% 
J6RZK[J\\fgmgqgqr{g|f}~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uK   ZC5: '- CRITICAL=0' → PASS (0건 등식 표기, 미해결 이슈 아님).u!   ## 발견된 이슈
- CRITICAL=0
ztask-zc5.mdr   r   ztask-zc5r   r    r!   u>   ZC5 'CRITICAL=0' 등식이 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_zc_critical_equals_zerorW     s}    0D%F
dW-  V EF(v% 
HPXIYHZZdekeoeopyezd{|%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uT   ZC6: '- CRITICAL = 0' → PASS (공백 포함 0건 등식, 미해결 이슈 아님).u#   ## 발견된 이슈
- CRITICAL = 0
ztask-zc6.mdr   r   ztask-zc6r   r    r!   u@   ZC6 'CRITICAL = 0' 등식이 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_zc_critical_eq_zero_spacedrY     s}    2D%F
dW-  V EF(v% 
J6RZK[J\\fgmgqgqr{g|f}~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u   ZC7: '- HIGH: 0 / CRITICAL: 0' → PASS (양쪽 0건 명시, 미해결 이슈 아님).

    (round-2: narrowed ZERO_EXPR는 :/= 구분자 요구 → 콜론 표기로 보강)
    u,   ## 발견된 이슈
- HIGH: 0 / CRITICAL: 0
ztask-zc7.mdr   r   ztask-zc7r   r    r!   uI   ZC7 'HIGH: 0 / CRITICAL: 0' 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_zc_high_zero_critical_zeror[     s    
 <D%F
dW-  V EF(v% 
STZ[cTdSeeopvpzpz  |E  qF  pG  	H%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uc   ZC8: '- fresh unresolved HIGH/CRITICAL = 0' → PASS (0건 등식 영문, 미해결 이슈 아님).u9   ## 발견된 이슈
- fresh unresolved HIGH/CRITICAL = 0
ztask-zc8.mdr   r   ztask-zc8r   r    r!   uL   ZC8 'fresh unresolved ... = 0' 등식이 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r    test_zc_fresh_unresolved_eq_zeror]   %  s    HD%F
dW-  V EF(v% 
VW]^fWgVhhrsys}s}  H  tI  sJ  	K%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u   ZC9: '- no new high/critical: 0건' → PASS (영문 부재 명시, 미해결 이슈 아님).

    (round-2: narrowed ZERO_EXPR는 명시적 zero 표현 요구 → '0건' 보강)
    u1   ## 발견된 이슈
- no new high/critical: 0건
ztask-zc9.mdr   r   ztask-zc9r   r    r!   uU   ZC9 'no new high/critical: 0건' 부재 명시가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_zc_no_new_high_critical_enr_   0  s    
 AD%F
dW-  V EF(v% 
_`fgo`p_qq{  }C  }G  }G  HQ  }R  |S  	T%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u   ZC10: '- CRITICAL: SQL injection (수정 없음)' → FAIL.

    '수정 없음'은 fix 부재(=미해결 신호)이지 zero-count(이슈 0건)가 아니다.
    탐지력 보존 — 실제 미해결 critical이므로 FAIL이어야 함.
    u>   ## 발견된 이슈
- CRITICAL: SQL injection (수정 없음)
ztask-zc10.mdr   r   z	task-zc10r   r    rC   uX   ZC10 '수정 없음'(fix 부재=미해결)이 zero-count로 오인되어 통과: status=r"   r#   Nr$   r*   s       r   'test_zc_preserve_unresolved_fix_absencera   >  s     ND&F
dW-  #f+ FF(v% 
bcijrcsbtt~  @F  @J  @J  KT  @U  V  	W%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uc   ZC11: '- ![critical] 인증 우회' → FAIL (실제 미해결 critical 배지, zero-count 아님).u0   ## 발견된 이슈
- ![critical] 인증 우회
ztask-zc11.mdr   r   z	task-zc11r   r    rC   uQ   ZC11 '![critical]' 미해결 배지가 zero-count로 오인되어 통과: status=r"   r#   Nr$   r*   s       r   *test_zc_preserve_critical_badge_unresolvedrc   M  s    ?D&F
dW-  #f+ FF(v% 
[\bck\l[mmwx~  yC  yC  DM  yN  xO  	P%r   c                  6    t         j                  d      du sJ y)u7   R2-1: 'HIGH/CRITICAL 0건' → zero-count 인정(True).u   - HIGH/CRITICAL 0건TNr&   _is_zero_count_context r   r   %test_r2_pass_high_critical_zero_countrh   `  s    ../EF$NNNr   c                  6    t         j                  d      du sJ y)u/   R2-2: 'CRITICAL=0' → zero-count 인정(True).z- CRITICAL=0TNre   rg   r   r   !test_r2_pass_critical_equals_zerorj   e  s    ..~>$FFFr   c                  6    t         j                  d      du sJ y)uG   R2-3: 'fresh unresolved HIGH/CRITICAL = 0' → zero-count 인정(True).z$- fresh unresolved HIGH/CRITICAL = 0TNre   rg   r   r   %test_r2_pass_fresh_unresolved_eq_zerorl   j  s%    ...	  r   c                  6    t         j                  d      du sJ y)uP   R2-4: '신규 HIGH 없음 / 신규 CRITICAL 없음' → zero-count 인정(True).u-   - 신규 HIGH 없음 / 신규 CRITICAL 없음TNre   rg   r   r   ,test_r2_pass_new_high_none_new_critical_nonern   q  s%    ..7	  r   c                  6    t         j                  d      du sJ y)uT   R2-5: '[CRITICAL] 인증 없음' → 미억제(False) — strong marker + vuln deny.u   [CRITICAL] 인증 없음FNre   rg   r   r   "test_r2_fail_critical_auth_missingrp   z  s    ../IJeSSSr   c                  6    t         j                  d      du sJ y)u=   R2-6: '[CRITICAL] 권한 검증 없음' → 미억제(False).u   [CRITICAL] 권한 검증 없음FNre   rg   r   r   #test_r2_fail_critical_authz_missingrr     s    ../PQUZZZZr   c                  6    t         j                  d      du sJ y)u9   R2-7: '[CRITICAL] 암호화 없음' → 미억제(False).u   [CRITICAL] 암호화 없음FNre   rg   r   r   (test_r2_fail_critical_encryption_missingrt     s    ../LMQVVVVr   c                  6    t         j                  d      du sJ y)uY   R2-8: '[HIGH] secure_mode=0' → 미억제(False) — strong marker + secure_mode=0 deny.z[HIGH] secure_mode=0FNre   rg   r   r   "test_r2_fail_high_secure_mode_zerorv     s    ../EF%OOOr   c                  6    t         j                  d      du sJ y)uA   R2-9: '[HIGH] timeout=0' → 미억제(False) — timeout=0 deny.z[HIGH] timeout=0FNre   rg   r   r   test_r2_fail_high_timeout_zerorx     s    ../ABeKKKr   c                  6    t         j                  d      du sJ y)u@   R2-10: '[CRITICAL] port=0' → 미억제(False) — port=0 deny.z[CRITICAL] port=0FNre   rg   r   r   test_r2_fail_critical_port_zerorz     s    ../BCuLLLr   c                  6    t         j                  d      du sJ y)um   R2-11: '[CRITICAL] 신규 버그, 패치 없음' → 미억제(False) — strong marker + 패치 없음 deny.u'   [CRITICAL] 신규 버그, 패치 없음FNre   rg   r   r   &test_r2_fail_critical_new_bug_no_patchr|     s    ../XY]bbbbr   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uc   R2-12a: 이슈 섹션 내 '- [CRITICAL] 인증 없음' → verify FAIL (실제 미해결 critical).u/   ## 발견된 이슈
- [CRITICAL] 인증 없음
ztask-r2-12a.mdr   r   ztask-r2-12ar   r    rC   uA   R2-12a '[CRITICAL] 인증 없음'이 억제되어 통과: status=r"   r#   Nr$   r*   s       r   *test_r2_preserve_e2e_critical_auth_missingr~     s~    >D((F
dW-  CK HF(v% 
KFS[L\K]]ghnhrhrs|h}g~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uV   R2-12b: 이슈 섹션 내 '- [CRITICAL] 신규 버그, 패치 없음' → verify FAIL.u>   ## 발견된 이슈
- [CRITICAL] 신규 버그, 패치 없음
ztask-r2-12b.mdr   r   ztask-r2-12br   r    rC   uA   R2-12b '[CRITICAL] 패치 없음'이 억제되어 통과: status=r"   r#   Nr$   r*   s       r   &test_r2_preserve_e2e_critical_no_patchr     s~    MD((F
dW-  CK HF(v% 
KFS[L\K]]ghnhrhrs|h}g~%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)u\   R2-12c: 이슈 섹션 내 '- HIGH/CRITICAL 0건' → verify PASS (zero-count 인정 보존).rN   ztask-r2-12c.mdr   r   ztask-r2-12cr   r    r!   u    R2-12c '0건'이 오탐: status=r"   r#   Nr$   r*   s       r   $test_r2_preserve_e2e_zero_count_passr     sy    8D((F
dW-  CK HF(v% 
*6(+;*<JvzzR[G\F]^%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uS   R3-1: '- CRITICAL 총0건' → PASS (한글 무공백 '총0건' zero-count 인정).u'   ## 발견된 이슈
- CRITICAL 총0건
ztask-r3-1.mdr   r   z	task-r3-1r   r    r!   uQ   R3-1 '총0건' 한글 무공백 zero-count가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   #test_r3_zc_total_zero_count_nospacer     s}    6D&F
dW-  #f+ FF(v% "#:fjj.C-D	F%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uh   R3-2: '- 이슈없음' → PASS (한글 무공백 '이슈없음' zero-count 인정, '이슈'가 anchor).u#   ## 발견된 이슈
- 이슈없음
ztask-r3-2.mdr   r   z	task-r3-2r   r    r!   uV   R3-2 '이슈없음' 한글 무공백 zero-count가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   test_r3_zc_issue_none_nospacer     }    2D&F
dW-  #f+ FF(v% "#:fjj.C-D	F%r   c                     d}| dz  }|j                  |d       t        j                  dt        |            }|d   dk(  sJ d	|d    d
|j	                  d              y)uh   R3-3: '- 이슈없다' → PASS (한글 무공백 '이슈없다' zero-count 인정, '이슈'가 anchor).u#   ## 발견된 이슈
- 이슈없다
ztask-r3-3.mdr   r   z	task-r3-3r   r    r!   uV   R3-3 '이슈없다' 한글 무공백 zero-count가 미해결 이슈로 오탐: status=r"   r#   Nr$   r*   s       r   #test_r3_zc_issue_none_plain_nospacer     r   r   )9__doc__importlib.utilr   r   pathlibr   __file__resolveparents	REPO_ROOT	WORKSPACEr(   r   r&   r/   r1   r3   r5   r7   r9   r;   r=   r?   rA   rD   rF   rH   rJ   rL   rO   rQ   rS   rU   rW   rY   r[   r]   r_   ra   rc   rh   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   r~   r   r   r   r   r   rg   r   r   <module>r      sS    
  N""$,,Q/		s $  ("[03DD&O
G
T
[
W
P
L
M
c$			r   