
    Ni                        d Z ddlmZ ddlZddlZddlmZ ddlZej                  dd       Z	ddZ
ddZddZdd	Zdd
Zy)u   Phase β-2 watchdog verdict 통합 + archived/escalated 영구 박제 회귀 테스트.

task-2387: 회장 stalled 알림 영구 종료를 위한 4건 회귀 테스트.
    )annotationsN)Pathc                    dddddddddddd	ddd
dddi}| dz  }|j                  t        j                  |d             |S )uL   3개 status (running, archived, escalated)를 가진 임시 task-timers.jsontasksrunning	dev3-teamz2026-05-03T01:00:00Z)statusteam_id
start_timearchivedz2026-05-03T00:00:00Z	escalatedz2026-05-03T00:30:00Zz
anu-direct)task-runningtask-archivedtask-escalatedtask-anutask-timers.jsonF)ensure_ascii)
write_textjsondumps)tmp_pathdataps      U/home/jay/workspace/.worktrees/task-2467-dev6/tests/dev3/test_phase_beta2_watchdog.pyfixture_timers_filer      sh     	'0[Xno(2{Zpq)4\rs#,Ukl	
D 	%%ALLDu56H    c                    dddt        |       g}t        j                  |ddd      }|j                  j	                         j                  d      D cg c]  }|s|	 c}S c c}w )u=   session-watchdog.sh line 59 jq 쿼리 재현 (Phase β-2 후)jqz-rz.tasks | to_entries[] | select(.value.status == "running") | select(.value.status != "archived" and .value.status != "escalated") | select(.value.team_id != "anu-direct") | .keyT)capture_outputtextcheck
)str
subprocessrunstdoutstripsplit)timers_filecmdresultlines       r   _watchdog_jq_queryr-      sc     	d	8 	KC ^^C4tLF#]]00288>GT$DGGGs   A#A#c                2    t        |       }d|vsJ d|v sJ y)uH   Fix 1: archived task는 watchdog jq 쿼리에서 제외되어야 한다.r   r   Nr-   r   keyss     r   )test_archived_task_excluded_from_watchdogr2   +   s)    12D$&&&T!!!r   c                2    t        |       }d|vsJ d|vsJ y)uI   Fix 1: escalated task는 watchdog jq 쿼리에서 제외되어야 한다.r   r   Nr/   r0   s     r   *test_escalated_task_excluded_from_watchdogr4   2   s)    12D4'''T!!!r   c           
     `   dddddddii}| dz  }|j                  t        j                  |             | dz  }t        j                  d	d
dddt        |      gt        |d      d       |j                  |       t        j                  |j                               }|d   d   d   dk(  sJ y)u<   Fix 3: jq로 status="escalated" 영구 박제 동작 검증.r   z	task-failr   r      )r	   r
   retry_count	max_retryr   ztask-timers.json.tmpr   z--argtidz!.tasks[$tid].status = "escalated"wT)r&   r!   r	   r   N)
r   r   r   r$   r%   r#   openreplaceloads	read_text)r   r   timerstmp_outafters        r   (test_retry_max_triggers_escalated_statusrB   9   s    kiK`apq#rstD**F
djj&' //GNN	w{,OQTU[Q\]GS! OOFJJv'')*E>+&x0K???r   c                   ddl }|j                  j                  dd       ddl}dddiddiddid	i}| d
z  }|j	                          |dz  }|j                  t        j                  |             |j                  |d|        |j                  dd      du sJ |j                  dd      du sJ |j                  dd      du sJ |j                  dd      du sJ y)u\   Fix 2: _set_task_status는 archived/escalated를 영구 박제하여 변경을 차단한다.r   Nz/home/jay/workspacer   r	   r   r   r   )r   r   r   memoryr   	WORKSPACEr   Fr   r   	completedTztask-nonexistent)
syspathinsertdispatchmkdirr   r   r   setattr_set_task_status)r   monkeypatchrG   rJ   r   
memory_dirr)   s          r   2test_set_task_status_blocks_archived_and_escalatedrP   K   s    HHOOA,- 	%y1&
3'5
D H$J11K4::d+,+x8$$_i@EIII$$%5yAUJJJ$$^[ATIII$$%7CtKKKr   )r   r   returnr   )r)   r   rQ   z	list[str])r   r   rQ   None)r   r   rQ   rR   )r   r   rN   zpytest.MonkeyPatchrQ   rR   )__doc__
__future__r   r   r$   pathlibr   pytestfixturer   r-   r2   r4   rB   rP    r   r   <module>rY      sO    #      
H""@$Lr   