
    4jK              	          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 ddlZ ee      j#                         j$                  j$                  j$                  Z ee      ej*                  v r!ej*                  j-                   ee             ej*                  j/                  d ee             ddlmZmZmZmZmZmZmZm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ ed	z  Z,ed
z  dz  Z-ed	z  dz  Z.e-dz  Z/edz  dz  Z0edz  dz  Z1edz  dz  Z2e-dz  Z3ed
z  dz  dz  Z4e,dz  Z5e,dz  Z6dZ7dZ8dZ9dZ:dZ;dZ<dMdZ=dNdZ>dOdZ? ej                  d       d!        ZAd" ZBd# ZCd$ ZDd% ZEd& ZFd' ZGej                  j                  d(d)d*d+d,d-fd)d*d.d/d0id1d2fg      d3        ZJd4 ZKej                  j                  d5d6d*d7d8d9fd6d*d:d,d8d;fd<g      d=        ZLd> ZMd? ZNd@ ZOdA ZPdB ZQdC ZRdD ZSdE ZTdF ZUdG ZVdH ZWdI ZXdJ ZYdK ZZdL Z[y)Pu  tests/regression/test_default_profile_resolver_2553plus52.py

task-2553+52 — TRACK 3: policy profile DEFAULT DISPATCH ADOPTION regression.

Spec: memory/tasks/task-2553+52.md
(sha256 41029c90209afb982f4a7f2689d741ffb2b2ec44860afbc31287773ec7726f9f).

§3 검증 (1~9):
  1. default profile resolver — goal_type + boundary 만으로 profile 선택
     (chair 가 policy_profile.name 안 줘도 RESOLVED, auto-bound)
  2. goal_type → policy_profile mapping 단일 결정 테이블 조회
  3. boundary → gate/HOLD/forbidden expansion 표면화 (engine read-only)
  4. profile decision → dispatch planning adapter (plan_only hard-pinned)
  5. profile decision → batch coordinator input adapter (closeout/merge/
     auto_confirm hard-pinned False)
  6. missing / unknown profile fail-closed (추측·날조 0)
  7. profile conflict fail-closed (explicit 충돌 + engine allowed∩forbidden)
  8. selected profile evidence JSON 산출 + schema 충족
  9. C1 engine byte-0 + +38 seam byte-0 + +39 binding byte-0 + 기존
     profile/anchor 무변, live repo HEAD/branch 전후 동일, 신규 산물 untracked

모든 테스트 100% offline — network / git mutation / GitHub API 호출 0.
    )annotationsN)Path)	EVIDENCE_SCHEMA_IDRESOLUTION_SCHEMA_IDDefaultDispatchRequestbuild_default_requestload_goal_type_mappingresolve_default_profileresolve_profile_namerun_default_profile_resolutionrun_selected_profile_evidence)adapt_for_coordinator_input)adapt_for_dispatch_planning)PolicyEngineErrorPolicyResolutionparse_goal_requestresolve_policyvalidate_against_metaschemasmemorypolicy_profileszgoal_type_profile_mapping.jsonanu_v3zpolicy_profile_engine.pyzdispatch_profile_selection.pyzcoordinator_profile_binding.pyz$test_only_hardening_pr_merge_v1.jsonfixturesztask-2553plus52.cases.jsonz&default_profile_resolution.schema.jsonz%goal_type_profile_mapping.schema.json@2363e291a0a43884892f5e554f115481a077322bd5caa3000fb75bf5b72bc6be@54d47cd013b62343dca98cfb946eae1608560102da24ed708a3ce641f1ce1c1a@ee6341040cb8b8fd60d341c79253b242ad2762e0c71b7855474ba40826d20c19@7e161d7dd579aae025d9c2c202e9f226839dcbbfdea312cb55f624e4a6582a13(20456b5f83fc039f2fd6f50f4b94095c29b41bfbz%task/task-2553p1-f1-clean-replacementc                d    t        j                  | j                               j                         S )N)hashlibsha256
read_bytes	hexdigest)ps    P/home/jay/workspace/tests/regression/test_default_profile_resolver_2553plus52.py_sha256r&   ]   s     >>!,,.)3355    c                     t        j                  ddt        t              g| ddd      j                  j                         S )Ngit-CTcapture_outputtextcheck)
subprocessrunstr	WORKSPACEstdoutstrip)argss    r%   _gitr6   a   s:    >>	c)n,t,$d fUUWr'   c                 0    t         t        t        t        dS )Nmapping_pathprofile_json_dirprofile_schema_dir
schema_dir)MAPPING_PATHPROFILE_JSON_DIRPROFILE_SCHEMA_DIR
SCHEMA_DIR r'   r%   _dirsrB   h   s    $,0 	 r'   module)scopec                 Z    t        j                  t        j                  d            d   S )Nutf-8encodingcases)jsonloadsFIXTURE	read_textrA   r'   r%   rI   rI   q   s$    ::g'''9:7CCr'   c                    t        t        ddddg      fi t               } | 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}||u }|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}||u }|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}||u }|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$                  d   }|s8ddt	        j                  |      iz  }t        t	        j                  |            d}y)u   chair 가 policy_profile.name 을 주지 않아도 (goal_type + boundary
    만으로) profile 이 자동 선택·바인딩된다 (회장 §1 핵심).t1zdefault pathtask_2553_final_closeoutforbid:production_writegoal_idgoal_statement	goal_typeboundaryRESOLVED==z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)srespy0py2py5assert %(py7)spy7NTis)z5%(py2)s
{%(py2)s = %(py0)s.profile_bound
} is %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.auto_apply
} is %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.default_path
} is %(py5)s)z=%(py2)s
{%(py2)s = %(py0)s.resolved_profile_name
} == %(py5)stask_2553_final_closeout_v1)z2%(py2)s
{%(py2)s = %(py0)s.profile_id
} == %(py5)snone)zA%(py2)s
{%(py2)s = %(py0)s.dispatch_lifecycle_effect
} == %(py5)sgate_condition_nameszassert %(py1)spy1)r
   r   rB   status
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationprofile_bound
auto_applydefault_pathresolved_profile_name
profile_iddispatch_lifecycle_effectboundary_expansion)r[   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_format2s           r%   .test_default_path_goal_type_plus_boundary_onlyr   w   s}    ")0/0		
 'C ::##:####:######3###3###:##########$$$$$$$$$$$$3$$$3$$$$$$$$$$$$$>>!T!>T!!!!>T!!!!!!3!!!3!!!>!!!T!!!!!!!#t#t####t######3###3######t#######$$B(BB$(BBBBB$(BBBBBBB3BBB3BBB$BBB(BBBBBBBB>>:::>:::::>:::::::3:::3:::>:::::::::::((2F2(F2222(F22222232223222(222F2222222!!"89999999999999r'   c            	     6   t        t        t              } | d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d	D ]  }t        | |      }||k(  }|sdt        j                  d
|fd||f      dt        j                         v st        j                  t              rt        j
                  t              nddt        j                         v st        j                  |       rt        j
                  |       nddt        j                         v st        j                  |      rt        j
                  |      nd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 )N)r9   r<   rs   Trb   z%(py1)s is %(py4)srg   py4assert %(py6)spy6)rP   runtime_structure_smoke_pilot(policy_profile_default_dispatch_adoptionrX   )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py6)sr   mappinggt)r]   rg   r^   r   r   assert %(py8)spy8)r	   r=   r@   ri   rj   rn   ro   rp   r   rk   rl   rm   )	r   r}   rz   @py_assert2@py_format5@py_format7r   @py_assert5@py_format9s	            r%   *test_mapping_is_deterministic_single_tabler      s:   $!jG >"*d*"d****"d***"***d******* 7
 $GR060B66660B666666#666#666666G666G666666R666R6660666666B666B66666667r'   c                 Z	   t        ddddg      } t        | fi t               }|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}}d}|j                  d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	dd|	iz  }
t        t	        j                  |
            dx}x}}ddddgddid}t        |t        t        t               j#                         }t        t        ddddg      fi t               }|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   }|d   }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	dd|	iz  }
t        t	        j                  |
            dx}x}}|d   }|d   }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	dd|	iz  }
t        t	        j                  |
            dx}x}}|d   }|d   }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	dd|	iz  }
t        t	        j                  |
            dx}x}}|d   }|d   }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	dd|	iz  }
t        t	        j                  |
            dx}x}}y) u   resolver 가 engine 산출을 재구현하지 않고 read-only 표면화하는지:
    boundary deny 가 forbidden 으로 확장되고, engine 정본 어댑터와 동치.t3xrP   zforbid:profile_selectrR   PROFILE_CONFLICTrX   rZ   r[   r\   r`   ra   Nexplicit_boundaryinz%(py1)s in %(py4)sr   r   r   t3brQ   namerS   rT   rU   rV   policy_profiler:   r;   r<   rW   okrf   z%(py1)s == %(py4)shold_trigger_conditionsallowed_actionsforbidden_actions)r   r
   rB   rh   ri   rj   rk   rl   rm   rn   ro   rp   rw   r   r>   r?   r@   to_coordinator_binding)reqr[   rx   ry   rz   r{   r|   r}   r   r   r   grengr   bes                  r%   2test_boundary_expansion_surfaces_engine_resolutionr      s[    !S,)*C
 "#
1
1C ::+++:+++++:+++++++3+++3+++:+++++++++++"Qc&<&<=P&QQ"&QQQQQ"&QQQQ"QQQ&QQQQQQQQ C/./!#=>	
B 
--*   
!#0/0	

 '
B 99"
"9
""""9
""""""2"""2"""9"""
"""""""			B$%D-C)DD%)DDDDD%)DDDD%DDD)DDDDDDDD'(JC0I,JJ(,JJJJJ(,JJJJ(JJJ,JJJJJJJJ :C(9$:: $::::: $:::: :::$::::::::!">c*=&>>"&>>>>>"&>>>>">>>&>>>>>>>>r'   c                 >   t        ddddfi t               } t        |       }|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Np1r   r   rS   rT   rU   signalPLAN_INPUT_OKrX   r   r   r   r   plan_admissibleTrb   r   	plan_onlywrite_authorityFmerge_authoritypr_branch_authorityauto_dispatchrv   re   r   rB   r   ri   rj   rn   ro   rp   )dpinr}   rz   r   r   r   s          r%   4test_dispatch_planning_adapter_plan_only_hard_pinnedr      s   &C5	7	C:?'	CA &a
(Cx=+O+=O++++=O+++=+++O+++++++ !)T)!T))))!T)))!)))T))))))){#t#t####t######t####### !*U*!U****!U***!***U******* !*U*!U****!U***!***U*******$%..%....%...%..........(5(5((((5((((((5(((((((*+5v5+v5555+v555+555v5555555r'   c                 \   t        ddddfi t               } t        |       }|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}t        ddi      }|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Np2r   no_such_goal_typer   r   Frb   r   r   r   r   r   PLAN_FAIL_CLOSEDrX   r   r   Tr   schemawrongPLAN_DECISION_UNAVAILABLEr   )r   r   r}   rz   r   r   r   bads           r%   5test_dispatch_planning_adapter_fail_closed_on_refusedr      s-   &C)	+	7.3g	7A &a
(C !*U*!U****!U***!***U*******x=...=.....=....=...........{#t#t####t######t####### !*U*!U****!U***!***U*******
%x&9
:Cx=777=77777=7777=77777777777 !*U*!U****!U***!***U*******r'   c                 F   t        ddddgdfi t               } t        |       }|d   }d}||k(  }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}y )Nc1r   r   rQ   rR   r   COORD_INPUT_OKrX   r   r   r   r   
consumableTrb   r   closeout_authorityFr   auto_confirmcoordinator_roledecision_consumer_only)r   rB   r   ri   rj   rn   ro   rp   )r   cinr}   rz   r   r   r   s          r%   .test_coordinator_input_adapter_no_auto_confirmr      s*   &C@/0	2	> 6;W	>A &a
(Cx=,,,=,,,,,=,,,,=,,,,,,,,,,,|$$$$$$$$$$$$$$$$$$$#$--$----$---$---------- !*U*!U****!U***!***U*******~'%'%''''%''''''%'''''''!">&>>"&>>>>>"&>>>>">>>&>>>>>>>>r'   zreq,sigcr   no_suchr   COORD_RESOLVER_REFUSEDrP   r   r   rS   rT   rU   r   COORD_RESOLVER_CONFLICTc                   t        t        | fi t                     }|d   }||k(  }|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}}|d   }d	}||u }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|d   }d	}||u }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|d   }d	}||u }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|d   }d	}||u }|slt        j                  d
|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nr   rX   z%(py1)s == %(py3)ssigrg   py3assert %(py5)sr_   r   Frb   r   r   r   r   r   r   r   )r   r   rB   ri   rj   rn   rk   rl   rm   ro   rp   )
r   r   r   r}   r   @py_format4r{   rz   r   r   s
             r%   *test_coordinator_input_adapter_fail_closedr      s    &&DS&TEG&T
UCx==C=C=CC|%%%%%%%%%%%%%%%%%%%#$--$----$---$---------- !*U*!U****!U***!***U*******~'%'%''''%''''''%'''''''r'   c                    t        ddi      } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t	        t        j
                  |            d x}x}}| d
   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t	        t        j
                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t	        t        j
                  |            d x}x}}y )Nr   zanu_v3.something.elser   COORD_DECISION_UNAVAILABLErX   r   r   r   r   r   Frb   r   r   )r   ri   rj   rn   ro   rp   )r   r}   rz   r   r   r   s         r%   :test_coordinator_input_adapter_unavailable_on_bad_decisionr     s	   
%x1H&I
JCx=888=88888=8888=88888888888#$--$----$---$----------~'%'%''''%''''''%'''''''r'   zraw,status,codea)rS   rT   DEFAULT_RESOLUTION_REFUSEDgoal_type_missingunknown_xyzgoal_type_not_mapped)*   r   default_request_not_mappingc                   t        | fi t               }|d   }||k(  }|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}}|d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   }||k(  }|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 )Nrh   rX   r   r   r   r_   rq   Frb   r   r   r   r   rr   refusal_codecode)
r   rB   ri   rj   rn   rk   rl   rm   ro   rp   )rawrh   r   r   r}   r   r   r{   rz   r   r   s              r%    test_missing_unknown_fail_closedr     ss    	's6eg6AX; ;&    ;&   ;      &   &       _&&&&&&&&&&&&&&&&&&&\?#e#?e####?e###?###e#######^$$$$$$$$$$$$$$$$$$$$$$$$r'   c           
        | dz  }|j                  t        j                  ddddddiid      d	
       t        dddd|t        t
        t              }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)uP   mapping 은 가리키지만 profile 파일 부재 → engine fail-closed 전파.m.jsonr   v1Tghostr   no_such_profile_zzz	schema_idversionrs   mappingsrF   rG   gr   r8   rh   r   rX   r   r   r   r   Nrq   Frb   r   r   profile_load_fail
write_textrJ   dumpsr   r>   r?   r@   ri   rj   rn   ro   rp   )tmp_pathbad_mapr   r}   rz   r   r   r   s           r%   /test_mapped_but_profile_file_absent_fail_closedr   "  sh   !GtzzT4/1FGH#     	'3WE/?-*	FA X;666;66666;6666;66666666666_&&&&&&&&&&&&&&&&&&&^3 33 33333 3333333 33333333r'   c                 6   t        dddddidfi t               } | d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   rP   r   r   r   rh   r   rX   r   r   r   r   rq   Frb   r   rr   r   explicit_profile_conflictr   rB   ri   rj   rn   ro   rp   r   r}   rz   r   r   r   s         r%   *test_explicit_profile_conflict_fail_closedr   3  s}   &30"$CD	F	R JO	RA X;,,,;,,,,,;,,,,;,,,,,,,,,,,_&&&&&&&&&&&&&&&&&&&\?#e#?e####?e###?###e#######^; ;; ;;;;; ;;;;;;; ;;;;;;;;r'   c                 :   t        ddddgdfi t               } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}| d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}| d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}y )Nr   r   zforbid:gate_evaluaterR   rh   r   rX   r   r   r   r   rq   Frb   r   rr   r   !engine_allowed_forbidden_conflictengine_decisionHOLD_FOR_CHAIRr   r   s         r%   2test_engine_allowed_forbidden_conflict_fail_closedr  >  s   &3@,-	/	; 38'	;A X;,,,;,,,,,;,,,,;,,,,,,,,,,,_&&&&&&&&&&&&&&&&&&&\?#e#?e####?e###?###e#######^C CC CCCCC CCCCCCC CCCCCCCC)=-==)-=====)-====)===-========r'   c                   | dz  }|j                  t        j                  ddddddiddigid	      d
       t        dddd|t        t
        t              }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   r   r   Tambr   r   br   rF   rG   r   r   r8   rh   r   rX   r   r   r   r   r   ambiguous_mapping_conflictr   )r   r  r   r}   rz   r   r   r   s           r%   +test_ambiguous_mapping_conflict_fail_closedr  J  s   
X
CNN4::T4.47G6MNO     	'3UC+;-*	FA X;,,,;,,,,,;,,,,;,,,,,,,,,,,^< << <<<<< <<<<<<< <<<<<<<<r'   c                    t        ddddgdfi t               } | d   }|t        k(  }|st        j                  d|fd|t        f      t        j
                  |      d	t        j                         v st        j                  t              rt        j
                  t              nd	d
z  }dd|iz  }t        t        j                  |            d x}}| d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d}| d   }||v }|slt        j                  d|fd ||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )!Ne1r   rP   rQ   rR   r   rX   r   r   r   r   r_   rs   Trb   r   r   r   r   selection_inputrU   r   "chair_supplied_policy_profile_nameFselectedrt   rq   fail_closedz$parse_goal_request -> resolve_policyengine_consumed_read_onlyr   r   )r   rB   r   ri   rj   rn   rk   rl   rm   ro   rp   )evr}   r   r   r{   rz   r   r   s           r%   #test_selected_profile_evidence_jsonr  Y  s   	&C0/0	2
> 6;W
>B h<-<-----<----<------------------n%%%%%%%%%%%%%%%%%%% -K1KK-1KKKKK-1KKKK-KKK1KKKKKKKK !EFO%OF%OOOOF%OOOFOOO%OOOOOOOj>12P6PP26PPPPP26PPPP2PPP6PPPPPPPPj>/*2d2*d2222*d222*222d2222222m%%%%%%%%%%%%%%%%%%%1TR8S5TT15TTTTT15TTTT1TTT5TTTTTTTTr'   c                4   t        j                  t        j                  d            }| D ]i  }t	        |d   fi t               }t        ||      }| }|st        j                  |d    d|       dz   ddt        j                         v st        j                  |      rt        j                  |      ndiz  }t        t        j                  |            d }|d	   }|t        k(  }|st        j                   d
|fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }	dd|	iz  }
t        t        j                  |
            d x}}l y )NrF   rG   requestr   z: schema errs z
>assert not %(py0)sr]   errsr   rX   r   r   r   r   r_   )rJ   rK   
RES_SCHEMArM   r   rB   r   ri   _format_assertmsgrk   rl   rm   rn   ro   rp   r   rj   )rI   r   r   r   r  rx   r~   r}   r   r   r{   s              r%   test_decision_satisfies_schemar  h  s   ZZ
,,g,>?F 3*1Y<C57C$Q/x;x;;AfI;nTF;;;;;;;4;;;4;;;;;;{2{22222{2222{222222222222222222	3r'   c                    t        j                  t        j                  d            } t        j                  t        j                  d            }t        ||       }| }|sddt        j                         v st        j                  t
              rt        j                  t
              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }t        t        j                  |            d x}}y )NrF   rG   z9assert not %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}r   r   r   r]   rg   r^   r   )rJ   rK   
MAP_SCHEMArM   r=   r   rk   rl   ri   rm   rn   ro   rp   )r   r   rz   r   r{   s        r%   test_mapping_satisfies_schemar  q  s    ZZ
,,g,>?Fjj///ABG$Wf55555555555$555$555555W555W555555f555f5555555555r'   c                :   t        |       }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nd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}}| D ]  }t        |d	   fi t               }|d
   j                         D ]  \  }}	||   }
|
|	k(  }|st        j                  d|fd|
|	f      t        j                  |
      dt        j                         v st        j
                  |	      rt        j                  |	      nddz  }t        j                  |d    d| d||   d|	      dz   d|iz  }t        t        j                  |            d x}
}  y )N   rX   )0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrI   )r]   rg   r   r   r   r   r  expectr   vr   r   .z: z != 
>assert %(py5)sr_   )r  ri   rj   rk   rl   rm   rn   ro   rp   r   rB   itemsr  )rI   r   r   ry   r   r   r   r   kr   r}   r   r{   s                r%   test_all_fixture_casesr%  w  s[   u::?:33uu: D*1Y<C57ChK%%' 	DDAqQ4C419CCC41CCC4CCCCCC1CCC1CCCC61QCr!A$aUCCCCCCC	DDr'   c                    t        t              } | t        k(  }|s7t        j                  d|fd| t        f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |       dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} }t        t              } | t        k(  }|s7t        j                  d|fd| t        f      dt        j                         v st        j                  t               rt        j                  t               ndd	t        j                         v st        j                  t              rt        j                  t              nd	t        j                  |       d
t        j                         v st        j                  t              rt        j                  t              nd
dz  }dd|iz  }t        t        j                  |            d x} }t        t              } | t        k(  }|s7t        j                  d|fd| t        f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |       dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} }y )NrX   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr&   	ENGINE_PYENGINE_SHA256_BASELINEr]   rg   r   r_   r`   ra   DPS_PYDPS_SHA256_BASELINECPB_PYCPB_SHA256_BASELINE)r&   r(  r)  ri   rj   rk   rl   rm   rn   ro   rp   r+  r,  r-  r.  )r   ry   r{   r|   s       r%   $test_engine_and_seam_byte0_unchangedr/    s   97!77777!77777777777777777797779777777777!7777!777777776?1?11111?11111117111711111161116111?1111111111111111116?1?11111?11111117111711111161116111?111111111111111111r'   c                 `   t        t              } t        t              }t        d      D ]  }t	        ddddfi t                 t        t              }|| k(  }| t        k(  }|r|szt        j                  d||fd|| t        f      dt        j                         v st        j                  t               rt        j                  t               ndd	t        j                         v st        j                  t              rt        j                  t              nd	t        j                  |      d
t        j                         v st        j                  |       rt        j                  |       nd
dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x}x}}t        t              }||k(  }|s+t        j                  d|fd||f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              nd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 )N   ir   rP   r   rY   rY   )r  z%(py6)s == %(py7)sr&   EXISTING_PROFILEbefore EXISTING_PROFILE_SHA256_BASELINE)r]   rg   r   r   ra   zassert %(py9)spy9rX   r'  r=   
map_beforer*  r`   ra   )r&   r4  r=   ranger   rB   r6  ri   rj   rk   rl   rm   rn   ro   rp   )	r5  r8  _r   ry   r   r|   @py_format10r{   s	            r%   5test_existing_profile_and_inputs_unchanged_idempotentr<    s   %&F&J1X B&s46	B9>	BB #$R$RR2RRRRRR$2RRRRRRR7RRR7RRRRRR#RRR#RRR$RRRRRRRRRRRRRRR2RRRR2RRRRRRRR< . J.... J......7...7......<...<... ......J...J.......r'   c                    t        dddddidt              } | d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}t        | t        t        t              }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            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}}t!        j"                  t$              5  t        ddddidt        t        t               ddd       y# 1 sw Y   yxY w)u=   +33 정본 API parse_goal_request / resolve_policy 무회귀.rr   r   rP   r   )r<   rS   rX   r   r   r   r   Nr   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer[   r   r  rW   rZ   r\   r`   ra   no_such_profile_xyz)rS   rT   r   )r   r@   ri   rj   rn   ro   rp   r   r>   r?   r?  r   rk   rl   rm   rh   pytestraisesr   )r   r}   rz   r   r   r   r[   rx   ry   r{   r|   s              r%   'test_canonical_engine_api_no_regressionrC    s   	3S"$>?	A
B i=C=C=C=C

--*FC c+,,,,,,,,:,,,:,,,,,,c,,,c,,,,,,+,,,+,,,,,,,,,,::##:####:######3###3###:##########	(	) Js &(=>@-1j		JJ J Js   5"K  K)c                    ddddgd} t        | fi t               }t        | fi t               }||k(  }|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}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nr2  r   rP   rQ   rR   rX   )z%(py0)s == %(py2)sr   r  )r]   r^   zassert %(py4)sr   rU   r   r   r   r   )
r   rB   ri   rj   rk   rl   rm   rn   ro   rp   )
r   r   r  rx   @py_format3r   r}   rz   r   r   s
             r%   $test_resolver_is_pure_and_idempotentrF    s    S2124C 	's6eg6A&s6eg6A6MMM1MMMMMM1MMM1MMMMMMMMMMMMMMMM{99999999999999999999999r'   c                     	 t        ddddfi t                t        di t                y # t        $ r"} t        j                  d|        Y d } ~ y d } ~ ww xY w)Nr   r   r   r   z)resolver leaked exception into dispatch: )r   )r   rB   	ExceptionrA  fail)es    r%   *test_resolver_does_not_raise_into_dispatchrK    s_    G&s-/	;27'	; 	'5UW5 G?uEFFGs   +. 	AAAc                    t        dddddgddi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d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}}| 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}}y )Nnr   z  gt  r      r   z p r   r   rX   )z1%(py2)s
{%(py2)s = %(py0)s.goal_type
} == %(py5)sr   r\   r`   ra   1)z0%(py2)s
{%(py2)s = %(py0)s.boundary
} == %(py5)sr$   )zD%(py2)s
{%(py2)s = %(py0)s.explicit_policy_profile_name
} == %(py5)s)r   rU   ri   rj   rk   rl   rm   rn   ro   rp   rV   explicit_policy_profile_name)r   rx   ry   rz   r{   r|   s         r%   %test_build_default_request_normalizesrQ    sy   
3X1X&%	BCC == D =D    =D      3   3   =   D       <<%C:%<:%%%%<:%%%%%%3%%%3%%%<%%%:%%%%%%%++2s2+s2222+s22222232223222+222s2222222r'   c                    t        dd      } t        ddd      }t        ddddfi t                d}d}t        ||      }|| k(  }| t        k(  }|r|sYt	        j
                  d||fd	|| t        f      d
t        j                         v st	        j                  t               rt	        j                  t               nd
t	        j                  |      t	        j                  |      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            d x}x}x}x}}d}d}d}t        |||      }||k(  }	|t        k(  }
|	r|
smt	        j
                  d|	|
fd||t        f      d
t        j                         v st	        j                  t               rt	        j                  t               nd
t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            d x}x}x}x}x}	}
t        j                  ddt        t               dddddddg
ddd       j"                  j%                         }d!}||k(  }|st	        j
                  d"|fd#||f      d$t        j                         v st	        j                  |      rt	        j                  |      nd$t	        j                  |      d%z  }t	        j&                  d&|      d'z   d(|iz  }t        t	        j                  |            d x}}y ))Nz	rev-parseHEADz--abbrev-refzr   rP   r   r3  )z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)sz%(py9)s == %(py10)sr6   head_beforeSANCTIONED_HEAD)r]   r^   r   r   r7  py10zassert %(py12)spy12)zC%(py8)s
{%(py8)s = %(py0)s(%(py2)s, %(py4)s, %(py6)s)
} == %(py11)sz%(py11)s == %(py12)sbranch_beforeSANCTIONED_BRANCH)r]   r^   r   r   r   py11rX  zassert %(py14)spy14r)   r*   zls-filesz"anu_v3/default_profile_resolver.pyz+anu_v3/profile_dispatch_planning_adapter.pyz+anu_v3/profile_coordinator_input_adapter.pyz5memory/policy_profiles/goal_type_profile_mapping.jsonz.schemas/default_profile_resolution.schema.jsonz<tests/regression/test_default_profile_resolver_2553plus52.pyTr+    rX   )z%(py0)s == %(py3)stracked)r]   r   u&   Track3 산물이 tracked 됨(위반): r"  r_   )r6   r   rB   rV  ri   rj   rk   rl   rm   rn   ro   rp   rZ  r/   r0   r1   r2   r3   r4   r  )rU  rY  rx   rz   r   @py_assert7@py_assert8@py_format11@py_format13@py_assert9@py_assert10@py_format15r^  r   r   r{   s                   r%   (test_live_repo_head_branch_ref_unchangedrf    s   {F+Knf=M"30	2>5:W> FVF4V$F$FFFFFFF$FFFFFF4FFF4FFFFFFVFFF$FFFFFFFFFFFFFFFFFFFFFFFFFFZ^ZVZ4^V4Z4ZZIZZZZZZ4IZZZZZZZ4ZZZ4ZZZZZZ^ZZZVZZZ4ZZZZZZZZZZZZZZZIZZZZIZZZZZZZZZnn	c)nj	-	6	6	@	9	G	I $d4 5;F557  N7b=NNN7bNNNNNN7NNN7NNNbNNNB7+NNNNNNNr'   )r$   r   returnr1   )r5   r1   rg  r1   )rg  dict)\__doc__
__future__r   builtinsrk   _pytest.assertion.rewrite	assertionrewriteri   r    rJ   r/   syspathlibr   rA  __file__resolveparentr2   r1   pathremoveinsertanu_v3.default_profile_resolverr   r   r   r   r	   r
   r   r   r   (anu_v3.profile_coordinator_input_adapterr   (anu_v3.profile_dispatch_planning_adapterr   anu_v3.policy_profile_enginer   r   r   r   r   r@   r>   r?   r=   r(  r+  r-  r4  rL   r  r  r)  r,  r.  r6  rV  rZ  r&   r6   rB   fixturerI   r   r   r   r   r   r   markparametrizer   r   r   r   r   r  r  r  r  r  r%  r/  r<  rC  rF  rK  rQ  rf  rA   r'   r%   <module>r~     s  . #      
  N""$++2299	y>SXXHHOOC	N# 3y> "
 
 
  "
x'*;; *->> "BB #==		X	 ?	?	X	 @	@#&LL 
h

+.J
JBB
AA
 G  G  G  G ! =; 6 hD  D
:.
7&?T6 + ? Ci	H	!	#C1#%DE
G 
#	$
(
(( C	0	%':	<Cm	L	%'=	?I	%	%4"<	>=U36D2/J(:G3Or'   