
    23jE                        d 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ZddlmZ ddlZ ee      j!                         j"                  d   Z ee      ej(                  vr"ej(                  j+                  d ee             ddlmZmZmZ ddlmZmZ ddlmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' dd	l(m)Z)m*Z* ed
z  dz  dz  Z+edz  dz  Z,edz  dz  Z-edz  dz  Z.dZ/dZ0dZ1 ejd                  d      d        Z3 ejd                  d      d        Z4d Z5d Z6d Z7d Z8d Z9d Z:d  Z;d! Z<d" Z=d# Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZEd+ ZFd, ZGd- ZHd. ZId/ ZJd0 ZKd1 ZLd2 ZMd3 ZNd4 ZOy)5ue  test_pre_authorized_activation_runner_2553plus6.py — task-2553+6 regression.

§9 필수 regression 15 + §9-R.5 추가 9 (총 24). builder/runner/CLI 자동화 +
9-R.1 4-primitive matrix + 9-R.3 binding preflight + 9-R.4 merge-impossibility
정적 증명 + 9-R.6 불변식.

전부 부작용 0 (실 git mutation/PR open 0 — dry-run + 정적 AST/grep).
    N)Path   )DECISION_ALLOWDECISION_HOLDevaluate)STATUS_DERIVEDderive)TASK_2553P1_EFFECTIVE_DIFF_6build_evidence_bundlestamp_provenancevalidate_bundle)STATUS_ACTIVATED_PR_OPENSTATUS_DRY_RUN_VERIFIEDSTATUS_HOLDallow_decision_validatorrun_activation)STATUS_DRY_RUN_PLANbindmemoryfixturesz2task-2553+1.f1solo.activation-evidence-bundle.jsonschemasz*pre_authorized_evidence_bundle.schema.jsonanu_v3z#pre_authorized_activation_runner.pyscriptsz run_pre_authorized_activation.py@f34e2445452cd84f22a378ece0cd922d0ff952fa545cc02268923a5f9fc46532@2e1af1124cb330b4398fbdcccb0a765126443b859d46acf45a96382082259a0a@6a66f7b76d7ef6cb16f099b5b1fea29a4dfb7e0312e13898e4db41bf246bb834module)scopec                  T    t        j                  t        j                  d            S )Nutf-8encoding)jsonloadsFIXTURE	read_text     W/home/jay/workspace/tests/regression/test_pre_authorized_activation_runner_2553plus6.pybundler*   G   s    ::g'''9::r(   c                 &   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   }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}}| ||fS )Nstatus==z%(py1)s == %(py3)sr   py1py3assert %(py5)spy5contractdecisionr   )r	   r   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationr   r   )r*   d@py_assert0@py_assert2@py_format4@py_format6cdecs           r)   allow_chainrF   L   s    vAX;(;.((((;.(((;((((((.(((.(((((((	*A
1+Cz?,?n,,,,?n,,,?,,,,,,n,,,n,,,,,,,1c>r(   c                    | \  }}}t        t        t              |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}}|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   }|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}}y
)uL   1. generated contract + gate ALLOW → activation runner proceeds (dry-run).F	repo_pathevidence_bundleactivater,   r-   r/   r   r0   r3   r4   Ngate_decisionr   binding_preflight_statusr   real_write_performedisz%(py1)s is %(py4)sr1   py4assert %(py6)spy6)r   str	WORKSPACEr   r7   r8   r9   r:   r;   r<   r=   r>   r   r   rF   b_rr@   rA   rB   rC   @py_assert3@py_format5@py_format7s              r)   5test_01_generated_contract_gate_allow_runner_proceedsr_   W   s   GAq!YUSAX;1;11111;1111;111111111111111111_////////////////////////'(?(,?????(,????(??????,????,????????#$--$----$---$----------r(   c           	         | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        t        t              |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}}|j                   }d}d} |||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}yc c}}w )uF   2. gate HOLD → activation runner refuses (HOLD packet, 실 write 0).Tevidencecritical_7_markerobserved_value
critical_7_provenancerH   r,   r-   r/   r   r0   r3   r4   NrN   FrO   zS%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s, %(py6)s)
} is %(py11)sr[   py0py2rS   rU   py8py11assert %(py13)spy13copydeepcopyr   itemsr   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   getrF   rY   rZ   badkvr[   r@   rA   rB   rC   @py_assert1r\   @py_assert5@py_assert7@py_assert10@py_assert9@py_format12@py_format14s                      r)    test_02_gate_hold_runner_refusesr~   a   s   GAq!
--
CKOC
O'()9:<H
SYY[OTQA<NAqDO
PCYtTAX;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%558'885'/858/58888/5888888188818885888'888888/888588888888 P   I
I
c                      ddddid} t        t        t              | 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}}d |d   D        }t        |      }|sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}}y)uE   3. raw GO-ready packet 직접 입력 → HOLD/refuse (bypass 차단).task-2553+1Tx   )task_idgo_readypacketrH   r,   r-   r/   r   r0   r3   r4   Nc              3   $   K   | ]  }d |v  
 yw)zraw GO-ready packetNr'   ).0r   s     r)   	<genexpr>z5test_03_raw_go_ready_packet_refuse.<locals>.<genexpr>q   s     Ea$)Es   hold_reasonsz,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)rh   ri   rS   )r   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   r   )	rawr[   r@   rA   rB   rC   rw   r\   r]   s	            r)   "test_03_raw_go_ready_packet_refuser   l   s    ##q
JCYtTAX;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%E1^3DEE3EEEEEEEEE3EEE3EEEEEEEEEEEEEEr(   c                    | \  }}}t        j                  |      }d|d   d<   t        |||d      }|d   }|t        k7  }|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}}y)u<   4. forged provenance → HOLD (binding precondition 차단).@0000000000000000000000000000000000000000000000000000000000000000re   evidence_bundle_sha256Tr6   r5   rJ   dry_runr,   !=z%(py1)s != %(py3)sr   r0   r3   r4   Nro   rp   r   r   r7   r8   r9   r:   r;   r<   r=   r>   
rF   rY   rD   rE   forgedpfr@   rA   rB   rC   s
             r)   test_04_forged_provenance_holdr   t   s    IAq#]]1F6>F=23	sVQ	MBh<.<.....<....<..................r(   c                 P   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }|d   }|t
        k7  }|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}}yc c}}w )u   5. evidence mismatch → HOLD.Fra   
fresh_baserc   is_ancestorre   r,   r   r   r   r0   r3   r4   Nro   rp   r   rq   r	   r   r7   r8   r9   r:   r;   r<   r=   r>   rF   rY   rZ   rt   ru   rv   r?   r@   rA   rB   rC   s              r)   test_05_evidence_mismatch_holdr   }   s    GAq!
--
CEJC
OL!"23MB
SYY[OTQA<NAqDO
PCsAX;(;.((((;.(((;((((((.(((.((((((( P   D"
D"
c                    | \  }}}t        j                  |      }ddg|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }|j                  d      }t        |r|ni       }|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}	}
yc c}}w )u$   6. expected_files mismatch → HOLD.zanu_v2/owner_trigger_pat.pyzsome/other/file.pyra   git_effective_diffrc   filesre   r5   r6   r-   r/   r   r0   r3   r4   N)ro   rp   r   rq   r	   rr   r   r   r7   r8   r9   r:   r;   r<   r=   r>   rF   rY   rZ   rt   ru   rv   r?   rD   rE   r@   rA   rB   rC   s                r)   $test_06_expected_files_mismatch_holdr      s    GAq!
--
C%HC
O()*:;GD SYY[OTQA<NAqDO
PCsA	jA
1r
"Cz?+?m++++?m+++?++++++m+++m+++++++	 Ps   E
E
c                 p   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }|d   }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}	}
yc c}}w )u"   7. same_branch_push=true → HOLD.   ra   same_branch_push_zerorc   source_branch_push_countre   r5   r6   r-   r/   r   r0   r3   r4   Nro   rp   r   rq   r	   r   r   r7   r8   r9   r:   r;   r<   r=   r>   r   s                r)   "test_07_same_branch_push_true_holdr      s    GAq!
--
C 	
 
O+,-=>" SYY[OTQA<NAqDO
PCsA	*A
1+Cz?+?m++++?m+++?++++++m+++m+++++++	 Ps   D2
D2
c                 P   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }|d   }|t
        k7  }|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}}yc c}}w )u&   8. source PR preserved=false → HOLD.(ffffffffffffffffffffffffffffffffffffffffra   source_pr_preservationrc   recomputed_head_share   r,   r   r   r   r0   r3   r4   Nr   r   s              r)   &test_08_source_pr_preserved_false_holdr      s    GAq!
--
C 	3 
O,-.>? SYY[OTQA<NAqDO
PCsAX;(;.((((;.(((;((((((.(((.((((((( Pr   c                    | \  }}}t        j                  |      }t        t              dgz   |d   d   d   d<   t	        |j                         D ci c]  \  }}|dk7  s|| c}}      }t        |      }|j                  d      xs 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}	}
yc c}}w )uL   9. F2 changed → HOLD (effective diff 에 F2-area 파일/스코프 확장).z-tests/regression/test_owner_trigger_phase3.pyra   r   rc   r   re   r5   r6   r-   r/   r   r0   r3   r4   N)ro   rp   listr
   r   rq   r	   rr   r   r   r7   r8   r9   r:   r;   r<   r=   r>   r   s                r)   test_09_f2_changed_holdr      s    GAq!
--
CGK$H	89H:C
O()*:;GD SYY[OTQA<NAqDO
PCsA	jRA
1+Cz?+?m++++?m+++?++++++m+++m+++++++	 Ps   E
!E
c                    | \  }}}t        j                  |      }t        t              dgz   |d   d   d   d<   t	        |j                         D ci c]  \  }}|dk7  s|| c}}      }t        |      }t        |j                  d      xs i       }|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}}	yc c}}w )uC   10. phase3/mqe changed → HOLD (forbidden path / scope expansion).zmerge_queue_executor.pyra   r   rc   r   re   r5   r6   r-   r/   r   r0   r3   r4   N)ro   rp   r   r
   r   rq   r	   r   rr   r   r7   r8   r9   r:   r;   r<   r=   r>   rF   rY   rZ   rt   ru   rv   r?   rE   r@   rA   rB   rC   s               r)   test_10_phase3_mqe_changed_holdr      s    GAq!
--
CGK$H	"#H$C
O()*:;GD SYY[OTQA<NAqDO
PCsA
155$*
+Cz?+?m++++?m+++?++++++m+++m+++++++ Ps   E
!E
c                 l   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }t        |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}}	yc c}}w )u%   11. credential/API required → HOLD.Tra   scope_declarationrc   requires_credentialre   r5   r6   r-   r/   r   r0   r3   r4   Nr   r   s               r)   $test_11_credential_api_required_holdr      s    GAq!
--
C 	 
O'()9: SYY[OTQA<NAqDO
PCsA
1Z=
!Cz?+?m++++?m+++?++++++m+++m+++++++ P   D0
D0
c                 l   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }t        |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}}	yc c}}w )u!   12. merge_required=true → HOLD.Tra   r   rc   requires_mergere   r5   r6   r-   r/   r   r0   r3   r4   Nr   r   s               r)    test_12_merge_required_true_holdr      s    GAq!
--
C 	 
O'()9: SYY[OTQA<NAqDO
PCsA
1Z=
!Cz?+?m++++?m+++?++++++m+++m+++++++ Pr   c                 P   | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        |      }|d   }|t
        k7  }|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}}yc c}}w )u'   13. callback contract missing → HOLD.Fra   callback_policy_markerrc   normalre   r,   r   r   r   r0   r3   r4   Nr   r   s              r)   &test_13_callback_contract_missing_holdr      s    GAq!
--
C 	 
O,-.>? SYY[OTQA<NAqDO
PCsAX;(;.((((;.(((;((((((.(((.((((((( Pr   c            	      P   dddd} t        t        t              | 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}}|d   }|t        k7  }|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}}|j                  }d}d} |||      }	d}
|	|
u }|st	        j
                  d|fd|	|
f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |	      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}x}x}	x}}
|j                  }d} ||      }d}||u }	|	st	        j
                  d|	fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            dx}x}x}x}	}y)u   14. actual PR open path 는 ALLOW(+activate+4조건)에서만 도달.

    HOLD 입력에 activate=True 라도 실 write 0 (primitive 미도달).
    r   T)r   r   r   rH   r,   r-   r/   r   r0   r3   r4   Nr   r   r   github_mutation_performedFrO   rf   r[   rg   rl   rm   	pr_number)zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} is %(py9)s)rh   ri   rS   rU   py9zassert %(py11)srk   )r   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   r   rr   )r   r[   r@   rA   rB   rC   rw   r\   rx   ry   rz   r{   r|   r}   @py_assert8@py_format10s                   r)   $test_14_actual_pr_open_only_in_allowr      s%   
 Tt
<CYtTAX;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%X;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55=,=e=5,e4==4====4======1===1===5===,===e===4===========55%%5%%%%%%%%%%%%1%%%1%%%5%%%%%%%%%%%%%%%%%r(   c                     t         j                  d      } t        j                  |       }g }t        j                  |      D ]  }t        |t        j                        st        j                  | |      xs d}|j                         j                  dd      }d|v rd|v r|j                  |       d|v s	d|v sd	|v s~|j                  |        | }|s~t        j                  d
|       dz   ddt        j                         v st        j                  |      rt        j                   |      ndiz  }t#        t        j$                  |            d}y)uS   15. merge path 는 어떤 경우에도 도달 불가 (정적: merge 호출 부재).r    r!     ghprmergepr_mergemergepullrequest--autou.   merge 호출 경로 발견(부재여야 함): z
>assert not %(py0)srh   rt   N)
RUNNER_SRCr&   astparsewalk
isinstanceCallget_source_segmentlowerreplaceappendr7   _format_assertmsgr:   r;   r<   r9   r=   r>   )srctreert   nodeseglowrw   @py_format2s           r)   "test_15_merge_path_never_reachabler      s   




0C99S>D
C  dCHH%((d39rC))+%%c2.C}C

3S $6#$=S

3  7J7JJDSEJJJJJJJsJJJsJJJJJJr(   c                    | \  }}}t        t        t              |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}}|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
)uD   16. --activate 미지정/False → gate ALLOW 라도 dry-run 유지.FrH   r,   r-   r/   r   r0   r3   r4   Nall_four_conditions_metTrO   rQ   rR   rT   rU   rN   activate_flag)r   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   rX   s              r)   $test_16_activate_false_keeps_dry_runr     sx   GAq!YUSAX;1;11111;1111;111111111111111111&'/4/'4////'4///'///4///////#$--$----$---$----------_&&&&&&&&&&&&&&&&&&&r(   c           	         | \  }}}t        j                  |      }d|d   d<   t        t        t              |d      }|d   }t
        t        f}||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            dx}x}}|j                  }
d}d} |
||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}x}x}x}}|j                  }
d}d} |
||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}x}x}x}}y)uB   17. --activate + gate ALLOW + provenance 검증 실패 → refuse.@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaare   r   TrH   r,   in)z%(py1)s in %(py4)srR   rT   rU   NrN   FrO   rf   r[   rg   rl   rm   r   )ro   rp   r   rV   rW   r   r   r7   r8   r9   r=   r>   rr   r:   r;   r<   )rF   rY   rZ   tamperedr[   r@   r\   rA   r]   r^   rw   rx   ry   rz   r{   r|   r}   s                    r)   1test_17_activate_allow_but_provenance_fail_refuser     s   GAq!}}QH8@H]45i.(T	A
 X;@;(?@@;@@@@@;@@@@;@@@@@@@@@@@558'885'/858/58888/5888888188818885888'888888/88858888888855=,=e=5,e4==4====4======1===1===5===,===e===4===========r(   c            	         t         t        fD ]  } | j                  d      }t        j                  |      }t        j
                  |      D ]  }t        |t        j                  t        j                  f      r7t        |dd      xs' |j                  r|j                  d   j                  ndxs d}d}|j                  } |       }||v}|st        j                  d|fd	||f      t        j                  |      d
t!        j"                         v st        j$                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }	t        j&                  d|       dz   d|	iz  }
t)        t        j*                  |
            dx}x}x}}t        |t        j,                        sdj/                  d t        j
                  |      D              }|j1                  dd      }g }d}||v}|}|rd}||v}|}|svt        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  }	|j3                  |	       |rt        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  }|j3                  |       t        j4                  |d      i z  }t        j&                  |  d|dd        dz   d|iz  }t)        t        j*                  |            dx}x}x}x}x}}d }||v}|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%z   d&|iz  }t)        t        j*                  |            dx}}d'}||v}|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%z   d&|iz  }t)        t        j*                  |            dx}}d)|v sd*}||v}|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%z   d&|iz  }t)        t        j*                  |            dx}}  y),u  18. runner/CLI merge·PR-merge·PR#102-mutation·same-branch-push 정적 부재.

    AST 기반 — 실 **호출식**(ast.Call)·import 만 검사. self-documenting 부재
    선언 상수(STATICALLY_ABSENT_MUTATIONS) / docstring 은 코드 경로 아님 → 제외.
    r    r!   r   Nr   r   r   )not in)zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}mod)r1   r2   r4   py7u   merge 모듈 import: z
>assert %(py9)sr   r   c              3      K   | ]R  }t        |t        j                        r6t        |j                  t              r|j                  j                          T y wN)r   r   ConstantvaluerV   r   )r   as     r)   r   zFtest_18_no_merge_or_same_branch_push_import_or_call.<locals>.<genexpr>?  s>       !!S\\2"177C0 GGMMO s   AA	ghprmergeprmerge)z%(py3)s not in %(py5)sln)r2   r4   z%(py7)sr   )z%(py10)s not in %(py12)s)py10py12z%(py14)spy14u   : PR merge 호출 발견: P   z
>assert %(py17)spy17r   )z%(py1)s not in %(py3)slitsr0   u$   : auto-merge 플래그 호출 발견z
>assert %(py5)sr4   merge_pull_requestu"   : merge_pull_request 호출 발견pushtask/task-2553-dev5u   : source-branch push 발견)r   CLI_SRCr&   r   r   r   r   Import
ImportFromgetattrnamesnamer   r7   r8   r9   r:   r;   r<   r   r=   r>   r   joinr   r   _format_boolop)src_pathr   r   r   r   r@   @py_assert4@py_assert6rA   @py_format8r   r   r   rw   r{   @py_assert11rC   @py_format13@py_format15@py_format16@py_format18rB   s                         r)   3test_18_no_merge_or_same_branch_push_import_or_callr  )  s     ) $  ' 2yy~HHTN !	D$S^^ <=D(D1 B.2jj

1**b   PciiPikPwk1PPPwkPPPwPPPPPPcPPPcPPPiPPPkPPP5J3%3PPPPPPPP $) xx   XXd^   \\#r*{ {",  "1D    {"  	 #  6   +-  	 +-   6  "  	 2;  6   CE  	 CE   6>     j :49+F        xt+   xt  	    6   (,  	 (,      j DE     , +25   +2  	 ,  6   46  	 46      j BC     R<0 0< 0  I 1  v   9=  I 9=   $*$?@   ?!	$r(   c                 .   ddl }|j                  ddt        t              ddgddd      j                  j                         }| \  }}}t        t        t              |d	
       |j                  ddt        t              ddgddd      j                  j                         }||k(  }d}||k(  }|r|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t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}y)u7   19. 실행(dry-run) 후 PR #102 head sha 불변 증명.r   Ngitz-Cz	rev-parser  T)capture_outputtextcheckFrH   (bd5ad74f5d443b354319fc8b3cb006816b8a9025r.   r.   )z%(py0)s == %(py3)sz%(py3)s == %(py5)sbeforeafter)rh   r2   r4   zassert %(py7)sr   )
subprocessrunrV   rW   stdoutstripr   r7   r8   r:   r;   r<   r9   r=   r>   )rF   r  r  rY   rZ   r  rw   r  rA   rC   r  s              r)   *test_19_pr102_head_sha_invariant_after_runr#  V  s-   ^^	c)nk3HI	  
 fUUW  GAq!S^QONN	c)nk3HI	  
 fUUW 
 UHHHHUHHHHHH6UHHHHHHH6HHH6HHHHHHUHHHUHHHHHHHHHHHr(   c           	         | \  }}}t        t        |d               }t        t              }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                  t               rt        j                  t               nd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                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            dx}x}}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}||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)u=   20. (dry-run) 신규 branch diff 계획 = 정확 6 파일만.effective_diff_filesr-   )zN%(py0)s == %(py8)s
{%(py8)s = %(py2)s(%(py6)s
{%(py6)s = %(py3)s(%(py4)s)
})
}effsortedsetr
   )rh   ri   r2   rS   rU   rj   zassert %(py10)sr   N   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrh   r1   r2   rU   assert %(py8)srj   z:tests/regression/test_owner_trigger_2553_plus1_high_fix.pyr   )z%(py1)s in %(py3)sr0   r3   r4   )r'  r(  r
   r7   r8   r:   r;   r<   r9   r=   r>   r+  )rF   rY   rD   rZ   r&  rx   ry   rw   @py_format9@py_format11rA   r  r^   r@   rB   rC   s                   r)   -test_20_planned_branch_diff_exactly_six_filesr0  k  s   GAq!
Q-./
0C9:;&:;;3;;;;;3;;;;;;;3;;;3;;;;;;&;;;&;;;;;;;;;;;;;;;9;;;9;;;:;;;;;;;;;;;s8q8q=8q33ss8qDDK D   	E     IL   IL     r(   c                     ddddid} t        t        t              | 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}}y)uV   21. runner 가 raw packet 직접 수신 → refuse (gate normalization bypass 차단).r   GOaction_typer   )r   	readiness pre_authorized_clean_replacementTrH   r,   r-   r/   r   r0   r3   r4   N)r   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   )r   r[   r@   rA   rB   rC   s         r)   :test_21_runner_raw_packet_refuse_gate_normalization_bypassr6  v  s     !-:C,@C
 	YtTAX;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%r(   c                    | \  }}}t        j                  |      }d|d<   t        |||d      }|d   }|t        k7  }|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}}y)uH   22. contract stamped 이나 deriver 출력과 byte-불일치 → refuse.ztask-9999-forgedr   Tr   r,   r   r   r   r0   r3   r4   Nr   r   s
             r)   (test_22_stamped_but_byte_mismatch_refuser8    s    IAq#]]1F*F9	sVQ	MBh<.<.....<....<..................r(   c                    | \  }}}t        t        t              |d      }t        t        t              |d      }|d   }|d   }||k(  }|t        k(  }|r|st	        j
                  d||fd||t        f      t	        j                  |      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}x}x}}g }|j                  }d} ||      }d
}||u }|}|r|j                  }d} ||      }d
}||u }|}|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      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                        t	        j                  |      t	        j                  |      dz  }dd|iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            d
x}x}x}x}x}x}x}x}x}x}x}}y
)uU   23. 동일 --activate 반복 → 중복 PR open 방지 (dry-run 반복 무부작용).FrH   r,   r  )z%(py1)s == %(py5)sz%(py5)s == %(py6)sr   )r1   r4   rU   r-  rj   Nr   rO   )zJ%(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s.get
}(%(py6)s)
} is %(py11)sr1)ri   rS   rU   rj   rk   z%(py13)srm   )zP%(py21)s
{%(py21)s = %(py17)s
{%(py17)s = %(py15)s.get
}(%(py19)s)
} is %(py24)sr2)py15r   py19py21py24z%(py26)spy26r   zassert %(py29)spy29)r   rV   rW   r   r7   r8   r9   r:   r;   r<   r=   r>   rr   r   r  )rF   rY   rZ   r:  r;  r@   r  rA   r\   r^   r.  rw   rx   ry   rz   r{   @py_assert16@py_assert18@py_assert20@py_assert23@py_assert22r|   r}   @py_format25@py_format27@py_format28@py_format30s                              r)   #test_23_idempotency_no_duplicate_prrK    s   GAq!	#i.!e	TB	#i.!e	TBh<B2h<B<<BB<+BBBBBB<<+BBBB<BBB<BBBBBB+BBBB+BBBBBBBBF266F+F6+F$F$&F266F+F6++>F$F+>$+FFFFF$FFFFFF2FFF2FFF6FFF+FFFFFF$FFFFFFF+>$FFFFFF2FFF2FFF6FFF+FFF+>FFF$FFFFFFFFFFFFFFFr(   c           	         | \  }}}t        j                  |      }d|d   d   d   d<   t        |j                         D ci c]  \  }}|dk7  s|| c}}      }t	        t        t              |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}}|j                   }d}d} |||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}yc c}}w )u=   24. binding preflight STATUS != DRY_RUN_PLAN → 실 write 0.broad_authorityra   r   rc   	authorityre   TrH   r,   r-   r/   r   r0   r3   r4   NrN   FrO   rf   r[   rg   rl   rm   rn   rs   s                      r)   2test_24_binding_status_not_dry_run_plan_zero_writerO    s   GAq!
--
C 	 
O,-.>? SYY[OTQA<NAqDO
PCYtTAX;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%558'885'/858/58888/5888888188818885888'888888/888588888888 Pr   c                     d } d} | |      }|t         k(  }|st        j                  d|fd|t         f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      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}x}}d} | |      }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      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}x}}d} | |      }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      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}x}}y
)u.   9-R.6: gate/deriver/binding 본체 sha 불변.c                 r    t        j                  t        | z  j                               j	                         S r   )hashlibsha256rW   
read_bytes	hexdigest)ps    r)   _shaz@test_25_unmodified_invariants_gate_deriver_binding.<locals>._sha  s*    ~~]&&(

)+	r(   z$anu_v3/pre_authorized_action_gate.pyr-   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py6)srW  GATE_BODY_SHA256_INVARIANT)rh   ri   rS   rU   r-  rj   Nz)anu_v3/pre_authorized_contract_deriver.pyDERIVER_SHAz)anu_v3/pre_authorized_executor_binding.pyBINDING_SHA)rX  r7   r8   r:   r;   r<   r9   r=   r>   rY  rZ  )rW  rw   r\   rx   r^   r.  s         r)   2test_25_unmodified_invariants_gate_deriver_bindingr[    s   
 7U467U7;UUUUU7;UUUUUUU4UUU4UUU6UUU7UUUUUU;UUUU;UUUUUUUU;K4;<K<KKKK<KKKKKK4KKK4KKK;KKK<KKKKKKKKKKKKKKKK;K4;<K<KKKK<KKKKKK4KKK4KKK;KKK<KKKKKKKKKKKKKKKKr(   c                  L   t        t        t                    } t        | t               | d   }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t
              rt        j                  t
              ndt        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}x}}ddlm} | d   d   } ||       }||k(  }	|	st        j                  d|	fd||f      t        j                  |      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  }
dd|
iz  }t        t        j                  |            d
x}x}	}y
)uR   builder = 19-kind 정확 정렬 + 스키마 통과 + _provenance 재해시 일치.)rI   ra      r-   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr+  )rh   ri   rS   r   zassert %(py9)sr   Nr   )canonical_evidence_sha256re   r   )z0%(py1)s == %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}r^  rY   )r1   r2   rS   rU   r-  rj   )r   rV   rW   r   EVIDENCE_SCHEMAr+  r7   r8   r:   r;   r<   r9   r=   r>   &anu_v3.pre_authorized_contract_deriverr^  )rY   rw   r\   r  rx   r  r   r^  r@   rA   r^   r.  s               r)   /test_26_builder_self_assert_zero_schema_alignedra    s   I7AA'}#3}############3###3###}############# ]45 9R	: 5 :   5 :    6      :S    :S      	
   	
  :       r(   c                 4   | \  }}}t        |      }g }||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}}t        |      }d	|d
<   t        |      }|sd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                  |      dz  }	t        t        j                  |	            d}t        |      }
dg|
d<   t        |
      }g }||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}}y)u>   ALLOW validator = decision machine 4-field 만 (prose 무관).r-   r*  r   rE   r,  r-  rj   Nevilgate_modulez,assert %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}spoof)rh   r1   r2   
irrelevantreasonsprose)
r   r7   r8   r:   r;   r<   r9   r=   r>   dict)rF   rZ   rE   rA   rx   r  r^   r.  re  rB   rh  s              r)   +test_27_allow_validator_machine_fields_onlyrj    s   IAq##C(.B.(B....(B......#...#......C...C...(...B.......IE!E-#E********#***#******E***E**********IE$~E)#E*0b0*b0000*b000000#000#000000E000E000*000b0000000r(   )P__doc__builtinsr:   _pytest.assertion.rewrite	assertionrewriter7   r   ro   rR  r#   syspathlibr   pytest__file__resolveparentsrW   rV   pathinsert!anu_v3.pre_authorized_action_gater   r   r   r`  r   r	   -anu_v3.pre_authorized_evidence_bundle_builderr
   r   r   r   'anu_v3.pre_authorized_activation_runnerr   r   r   r   r   &anu_v3.pre_authorized_executor_bindingr   r   r%   r_  r   r  rX  rY  rZ  fixturer*   rF   r_   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r#  r0  r6  r8  rK  rO  r[  ra  rj  r'   r(   r)   <module>r}     s    
    
  N""$,,Q/	y>!HHOOAs9~& 
    ;;  	HH  @@  i
"D
D G  QP h;  ; h  .9F/),,	),
,
,
,	)
&K"'> *ZI*&/G
9
L
1r(   