
    j                    F   d Z ddlmZ ddlZddlmc mZ ddl	Z
ddlZddlZddlZddlmZ  ee      j#                         j$                  d   Z eedz        Zej,                  D  cg c]
  } | ek7  s	|  c} ej,                  dd  ee      ej,                  vr"ej,                  j/                  d ee              eej2                        D cg c]  }|dk(  s|j5                  d      s| c}D ]B  Zej2                  j9                  e      Z eed	d
      xs d
Zdev sed
k(  s6ej2                  e= D ddZ  e dd        ee      j#                         jB                  jB                  jB                  Z"e"dz  dz  dz  dz  Z#ddZ$ddZ%ddZ&ddZ'yc c} w c c}w )uo  tests.regression.test_team_prompts_doctrine_injection — task-2640 Track B.

회장 verbatim unfork #4 — prompts/team_prompts.py 텍스트 + 코드 contract 연결.
SELF_COLLECTOR / SENDFILE_ONLY / NOT_REGISTERED verbatim doctrine block 이
prompt 본문에 자동 주입되는지 fixture 단언.

Layer A / NO-CRON: subprocess / cokacdir / merge / cron 호출 0.
    )annotationsN)Path   testsdispatchz	dispatch.__file__ z/tests/dispatchc                   t         j                  j                  |       }|3t        |dd      r&t	        |j
                        j                  |      r|S t        j                  j                  | t        |z        }g }d }||u}|}|r|j                  }d }	||	u}
|
}|st        j                  d|fd||f      dt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      dz  }dd|iz  }|j%                  |       |rt        j                  d
fd		f      dt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      t        j"                  |	      d
z  }dd|iz  }|j%                  |       t        j&                  |d      i z  }t        j(                  d|       dz   d|iz  }t+        t        j,                  |            d x}x}x}x}x}x}
}	t        j                  j/                  |      }|t         j                  | <   |j                  j1                  |       |S )Nr   r	   )is not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16r   zspec not found: z
>assert %(py19)spy19)sysmodulesgetgetattrstrr   endswith	importlibutilspec_from_file_location_ROOTloader
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolop_format_assertmsgAssertionError_format_explanationmodule_from_specexec_module)modnamerelpathexistingr   @py_assert1@py_assert4@py_assert3@py_assert0@py_assert10@py_assert13@py_assert12@py_format6@py_format8@py_format15@py_format17@py_format18@py_format20mods                     L/home/jay/workspace/tests/regression/test_team_prompts_doctrine_injection.py
_load_realr?       s   {{w'H*b Ac(J[J[F\FeFefmFn>>11'57?KDUtU4tUU4U4 7UUUU4tUUUUUU4UUU4UUUtUUUUUUU4UUUUUUUUUUUUUUU4UUUUUUUUUU;KG99UUUUUUUUU
..
)
)$
/CCKKKKC J    z*dispatch.spawn_callback_contract_validatorz-dispatch/spawn_callback_contract_validator.pyfixturesself_collector_enforcement!prompt_level_self_collector_blockc                     t        j                  t        dz  j                  d            } t        j                  t        dz  j                  d            }| |fS )Nzevidence.jsonzutf-8)encodingzexpected.json)jsonloadsFIXTURE_DIR	read_text)evidenceexpecteds     r>   _load_fixturerL   8   sO    zz;8CCWCUVHzz;8CCWCUVHXr@   c                    ddl m} m}m}  |       }||v }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd	|iz  }t        t	        j                  |            d
}d}| |k(  }|st	        j
                  d|fd| |f      dt        j                         v st	        j                  |       rt	        j                  |       ndt	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d
x}}| |v }|st	        j
                  d|fd| |f      dt        j                         v st	        j                  |       rt	        j                  |       nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd	|iz  }t        t	        j                  |            d
}dD ]  }
|
|v }|st	        j
                  d|fd|
|f      dt        j                         v st	        j                  |
      rt	        j                  |
      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd	|iz  }t        t	        j                  |            d
} d}||v }|st	        j
                  d|fd||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }	t        t	        j                  |	            d
x}}y
)uN   _build_self_collector_doctrine_block 가 5축 토큰을 verbatim 포함한다.r   )ANU_NORMAL_COLLECTOR_KEYSELF_COLLECTOR_DOCTRINE_HEADER$_build_self_collector_doctrine_blockinz%(py0)s in %(py2)srO   blockpy0r   assert %(py4)spy4Nc119085addb0f8b7==)z%(py0)s == %(py3)srN   )rV   py3zassert %(py5)sr   )SELF_COLLECTORSENDFILE_ONLYNOT_REGISTEREDtokenzcollector_role=ANU)z%(py1)s in %(py3)s)py1r\   )prompts.team_promptsrN   rO   rP   r    r!   r"   r#   r$   r%   r)   r*   )rN   rO   rP   rT   r0   @py_format3@py_format5@py_assert2@py_format4r7   r`   r3   s               r>   8test_build_self_collector_doctrine_block_verbatim_tokensrg   >   s     12E)U2222)U222222)222)222222U222U2222222'99#'99999#'9999999#999#999'99999999#u,,,,#u,,,,,,#,,,#,,,,,,u,,,u,,,,,,,F ~uuu(5((((5(((((((((5(((5(((((((r@   c                    t         j                  j                  dd       ddlm} m}m} t               \  }} ||d   |d   |d   |d   |d	   
      }||v }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d}| |v }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d}|d   D ]  }	|	|v }|st        j                  d|fd|	|f      dt        j                         v st        j                  |	      rt        j                  |	      nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                   d|	d      dz   d|iz  }t        t        j                  |            d} y)uE   team_prompts.build_prompt 가 doctrine block 을 자동 주입한다.COKACDIR_KEY_ANUrY   r   )rN   rO   build_promptteam_idtask_id	task_desclevel	task_typerk   rl   rm   rn   ro   rQ   rS   rO   promptrU   rW   rX   NrN   tokens_required_in_promptr`   zdoctrine token z missing in prompt bodyz
>assert %(py4)s)osenviron
setdefaultrb   rN   rO   rj   rL   r    r!   r"   r#   r$   r%   r)   r*   r(   )
rN   rO   rj   rJ   rK   rq   r0   rc   rd   r`   s
             r>   2test_build_prompt_injects_doctrine_block_dev6_teamrv   O   s    JJ,.@A  'Hh##;'w;'F *V3333)V333333)333)333333V333V3333333#v----#v------#---#------v---v-------56 
 	
 	
u 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
   	
 	
 		  	
 	
  eY&=>	
 	
 	
 	
 	

r@   c                    t         j                  j                  dd       ddlm}  ddlm} t               \  }} ||d   |d   |d   |d	   |d
         } | |d   dd|      }|d   }|j                  }|d   }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            dx}x}	}|j"                  }|d   }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            dx}x}	}|j$                  }|d   }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            dx}x}	}|j&                  }|d   }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            dx}x}	}|j(                  }g }||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            dx}x}	}y)uK   doctrine block 주입 후 validate_spawn_callback_contract 가 PASS 한다.ri   rY   r   ) validate_spawn_callback_contract)rj   rk   rl   rm   rn   ro   rp   1e41a2324a3ccdd0)rl   executor_keyanu_keyprompt_text"validator_result_after_block_addedverdictrZ   )z/%(py2)s
{%(py2)s = %(py0)s.verdict
} == %(py5)sresult)rV   r   r   zassert %(py7)sr   Nprompt_has_anu_key)z:%(py2)s
{%(py2)s = %(py0)s.prompt_has_anu_key
} == %(py5)sprompt_has_collector_role)zA%(py2)s
{%(py2)s = %(py0)s.prompt_has_collector_role
} == %(py5)sprompt_has_required_doctrine)zD%(py2)s
{%(py2)s = %(py0)s.prompt_has_required_doctrine
} == %(py5)s)z7%(py2)s
{%(py2)s = %(py0)s.classifications
} == %(py5)s)rs   rt   ru   *dispatch.spawn_callback_contract_validatorrx   rb   rj   rL   r~   r    r!   r"   r#   r$   r%   r)   r*   r   r   r   classifications)rx   rj   rJ   rK   rq   r   expected_afterr0   r1   r2   r7   r8   s               r>   :test_build_prompt_doctrine_block_satisfies_spawn_validatorr   j   s   JJ,.@A 2&Hh##;'w;'F .#'"	F BCN>>6^I66>66666>666666666666666>66666666666$$L7K(LL$(LLLLL$(LLLLLLL6LLL6LLL$LLL(LLLLLLLL++Z~>Y/ZZ+/ZZZZZ+/ZZZZZZZ6ZZZ6ZZZ+ZZZ/ZZZZZZZZ..`.A_2``.2`````.2```````6```6```.```2````````!!'R'!R''''!R''''''6'''6'''!'''R'''''''r@   )r-   r   r.   r   )returnztuple[dict, dict])r   None)(__doc__
__future__r   builtinsr"   _pytest.assertion.rewrite	assertionrewriter    importlib.utilr   rF   rs   r   pathlibr   r   resolveparentsr   r   
_TESTS_DIRpathinsertlistr   
startswith_mr   _cachedr   _fr?   parent	WORKSPACErH   rL   rg   rv   r   )pks   00r>   <module>r      s   #      	 
  	X ((+!
((6Qa:oq6u:SXXHHOOAs5z"3;;'
X1
?all;>W1
X Bkkoob!G	*b	)	/RBB"(KKO		 03
 N""$++2299	*$'CC)* )"
6(i 7 Ys   (
F3FF-F