
    i                        d Z ddlmZ ddlZddlZddlmZ  ee      j                         j                  d   Zedz  dz  ZddZdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)u1   extract_followup.py 회귀 테스트 (task-2360).    )annotationsN)Path   scriptszextract_followup.pyc                ~   | j                  dt        |             t        j                  j	                  dd       t
        j                  j                  dt              }|r|j                  sJ t
        j                  j                  |      }|t        j                  d<   |j                  j                  |       |S )u6   isolated WORKSPACE_ROOT으로 모듈을 새로 로드.WORKSPACE_ROOTextract_followupN)setenvstrsysmodulespop	importlibutilspec_from_file_locationSCRIPTloadermodule_from_specexec_module)monkeypatch	workspacespecmods       T/home/jay/workspace/.worktrees/task-2457-dev3/scripts/tests/test_extract_followup.py_loadr      s    'Y8KKOO&->>112DfMDDKK
..
)
)$
/C&)CKK"#KKC J    c                    | dz  dz  j                  d       | dz  dz  j                  d       | dz  dz  j                  d       | dz  j                  d       | S )NmemoryeventsT)parentsreportstaskslogs)mkdir)tmps    r   _setup_workspacer&      sj    8^h%%d%38^i&&t&48^g$$T$26\&Jr   c                    t        |       }|dz  dz  dz  j                  dd       t        ||      }|j                  d      }|d   d	k(  sJ |d
   dk(  sJ |d   dgk(  sJ y)u.   followup.txt가 있으면 우선 사용된다.r   r   ztask-1.followup.txtu>   ## 핵심 결과
테스트.

## 회장 결정 필요
- A vs B
utf-8encodingztask-1sourcefollowup_txtcore_resultu
   테스트.decisions_neededzA vs BNr&   
write_textr   r	   tmp_pathr   wsr   outs        r   "test_extract_followup_txt_priorityr5   "   s    	(	#B(]X 55AA	  B  R
 C


x
(Cx=N***}---!"xj000r   c                    t        |       }|dz  dz  dz  j                  dd       t        ||      }|j                  d      }d|d	   v sJ d
|d   xs dv sJ |d   dgk(  sJ |d   dgk(  sJ |d   dgk(  sJ y)u5   followup.txt 없으면 보고서에서 자동 추출.r   r!   z	task-2.mdu   # task-2 작업

## 요약 (SCQA)
**A**: 핵심 답변입니다.

## 회장 결정 필요
- 결정 한 건

## 머지 필요
- PR #99

## 미해결
- 없음

## 다음 단계 권장
- task-3
r(   r)   ztask-2reportr+   u   핵심 답변r-    r.   u   결정 한 건merges_neededzPR #99
next_stepstask-3Nr/   r1   s        r   %test_extract_followup_report_fallbackr<   5   s    	(	#B(]Y,88	" % 9 ( R
 C


x
(Cs8}$$$s=17R888!"'7&8888H:---|
***r   c                    t        |       }|dz  dz  dz  j                  dd       |dz  dz  dz  j                  d	d       t        ||      }|j                  d
      }|d   dgk(  sJ |d   dgk(  sJ y)uW   followup.txt가 일부 섹션만 채우면, 빈 섹션은 보고서에서 보충된다.r   r   ztask-3.followup.txtu(   ## 회장 결정 필요
- 강조 결정
r(   r)   r!   z	task-3.mdui   # task-3

## 머지 필요
- PR #1

## 회장 결정 필요
- (보고서 결정 — 우선순위 낮음)
r;   r.   u   강조 결정r9   zPR #1Nr/   r1   s        r   1test_followup_supplements_missing_report_sectionsr>   U   s    	(	#B(]X 55AA	 	 B  (]Y,88	  9 
 R
 C


x
(C!"&7777G9,,,r   c                    t        |       }|dz  dz  dz  j                  dd       t        ||      }|j                  d      }|d   d	k(  sJ |d
   dk(  sJ y )Nr   r   ztask-4.completion.txtu   단순 완료 메시지r(   r)   ztask-4r+   
completionr-   r/   r1   s        r   -test_completion_fallback_when_no_other_sourcerA   q   sx    	(	#B(]X 77CC!G D  R
 C


x
(Cx=L(((}!::::r   c                L   t        |       }t        d      D cg c]  }d| ddz    }}|dz  dz  dz  j                  dd	j                  d
 |D              z   d       t	        ||      }|j                  d      \  }}t        |      |j                  k  sJ d|v sJ yc c}w )u;   4000자 초과 시 우선순위 낮은 섹션은 잘린다.2   u   매우 긴 항목  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   r   ztask-5.followup.txtu   ## 회장 결정 필요

c              3  &   K   | ]	  }d |   yw)z- N ).0xs     r   	<genexpr>z5test_format_anu_message_truncation.<locals>.<genexpr>   s     /MQ"QC/Ms   r(   r)   ztask-5u*   상세 보고서: memory/reports/task-5.mdN)r&   ranger0   joinr   build_message_for_tasklenTELEGRAM_LIMIT)r2   r   r3   i
long_itemsr   msg_s           r   "test_format_anu_message_truncationrU   |   s    	(	#BAFrKA&qc+i7KJK(]X 55AA#dii/M*/M&MMX_ B  R
 C''1FCs8s)))))73>>> Ls   B!c                    t        |       }|dz  dz  dz  j                  dd       t        ||      }|j                  ddd	
      \  }}|rJ |dk(  sJ y)u0   이미 .anu-notified가 있으면 발송 스킵.r   r   ztask-6.anu-notifiedr8   r(   r)   ztask-6rS   T)dry_runzalready-notifiedN)r&   r0   r   send_anu_cron)r2   r   r3   r   okstatuss         r   test_send_anu_cron_deduper[      sk    	(	#B(]X 55AA"wAW
R
 C""8UD"AJBM6''''r   c                    t        |       }t        ||      }|j                  d      }d|vsJ d|v sJ t        |      dk(  sJ y)uA   cokacdir 호환 — 'YYYY-MM-DD HH:MM:SS' 형식 (T 구분자 X).<   TrD      N)r&   r   _at_time_secondsrO   )r2   r   r3   r   ats        r   #test_at_format_uses_space_separatorrb      sP    	(	#B
R
 C			b	!Bb=="99r7b==r   c                    t        |       }ddgdgdgdgd}t        ||      }|j                  ddd	|      }d
D ]  }||v rJ  d|v sJ d|v sJ d	|v sJ d|v sJ y )Nu   결과d1m1u1n1)r-   r.   r9   
unresolvedr:   ztask-7z	dev7-teamzbot-h)u   핵심 결과u   회장 결정 필요u   머지 필요u	   미해결u   다음 단계 권장zmemory/reports/task-7.md)r&   r   format_anu_message)r2   r   r3   itemsr   rS   ss          r   )test_format_message_includes_all_sectionsrl      s    	(	#B!FffE R
 C

 
 ;
GCl Cxxs??#c>>%,,,r   c                    t        |       }|dz  dz  dz  j                  dd       t        ||      }|j                  d      }|d   d	k(  sJ |d
   J d|d
   v sJ y)u>   헤더 없는 followup.txt는 전체를 core_result로 취급.r   r   ztask-8.followup.txtu6   이건 그냥 한 줄 메모.
핵심 결과만 있음.r(   r)   ztask-8r+   r,   r-   Nu   한 줄 메모r/   r1   s        r   4test_followup_without_headers_treated_as_core_resultrn      s    	(	#B(]X 55AAAG B  R
 C


x
(Cx=N***})))s=1111r   )r   r   )r%   r   returnr   )__doc__
__future__r   importlib.utilr   r   pathlibr   __file__resolver    REPOr   r   r&   r5   r<   r>   rA   rU   r[   rb   rl   rn   rH   r   r   <module>rw      sy    7 "  
 H~''*			1	1
1&+@-8;
?(-&
2r   