
     j)                        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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mZmZ g dZdefdZd	 Zd
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d  Z5e6d!k(  r e7 ejp                  ed"g            y)#u  test_pre_authorized_action_gate.py — task-2553+4 회장 필수 테스트 10 + schema + fixture.

회장 verbatim 필수 테스트:
  1. task-2553+1 F1-solo clean replacement PR contract → ALLOW
  2. merge=true → HOLD
  3. same_branch_push=true → HOLD
  4. expected_files mismatch → HOLD
  5. credential_required=true → HOLD
  6. critical_7=true → HOLD
  7. codex_verdict=FAIL → HOLD
  8. callback normal/fallback 누락 → HOLD
  9. source_pr_preserved=false → HOLD
 10. action_type unknown → HOLD

추가: schema validation fail → HOLD / GO-ready packet 정규화 / decision schema 정합 /
expected_files exact-match / fail-closed all-true 이중 안전.
    N)Path   )CONTRACT_SCHEMA_NAMEDECISION_ALLOWDECISION_HOLDDECISION_SCHEMA_NAMEevaluate)zanu_v2/owner_trigger_pat.pyz4tests/regression/test_owner_trigger_2553_plus1_f1.pyzmemory/reports/task-2553+1.mdz%memory/events/task-2553+1.result.jsonz*memory/events/task-2553+1.red-evidence.logz,memory/events/task-2553+1.green-evidence.logreturnc                      i dt         dddddddd	d
ddddd
dddt        t              dt        t              dg ddddddddddddddddd
d
dddddS )uP   task-2553+1 F1-solo clean replacement PR open canonical contract (ALLOW 대상).schematask_idtask-2553+1action_typeclean_replacement_pr_open	source_prf   (bd5ad74f5d443b354319fc8b3cb006816b8a9025ztask/task-2553-dev5T)numberhead_shabranch	preservedsame_branch_pushF
fresh_basebase_sha(7346df8260803308df30a6d04ec32d66d4cdfa5bexpected_fileseffective_diff_filesforbidden_paths_touchedeffective_diff_contamination
critical_7credential_change_requiredowner_pat_touch_requiredactual_api_call_requiredreal_write_required!limited_real_write_entry_requiredPASS_WITH_RECOMMENDATIONSnormalfallback)scope_expansioncodex_verdictcallbackmerge_requiredauto_closeoutdev_status_change)r   listF1_SOLO_EXPECTED_FILES     G/home/jay/workspace/tests/regression/test_pre_authorized_action_gate.py_f1_solo_contractr5   2   s   &= 	2 	B+	
	 	E 	d 	> 	$56 	%; < 	"2  	'!" 	e#$ 	%e%& 	#E'( 	#E)* 	u+, 	,U-. !4#6"9 r3   c                     t        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  }t        j                  | d         dz   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}}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}}| d   }|j                  } |       }	t        |	      }
|
sddt        j                         v st        j                  t              rt        j
                  t              ndt        j
                  |      t        j
                  |      t        j
                  |	      t        j
                  |
      dz  }t        t        j                  |            d x}x}x}	}
y )Ndecision==z%(py1)s == %(py3)sr   py1py3reasons
>assert %(py5)spy5r   r   assert %(py5)sno_github_write_performedTisz%(py1)s is %(py4)sr<   py4assert %(py6)spy6r   auto_allowed_actionsinz%(py1)s in %(py4)schecksz_assert %(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.values
}()
})
}all)py0py2rG   rI   py8)r	   r5   r   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_name_format_assertmsgAssertionError_format_explanationr   valuesrO   )d@py_assert0@py_assert2@py_format4@py_format6@py_assert3@py_format5@py_format7@py_assert1@py_assert5@py_assert7@py_format9s               r4   4test_01_f1_solo_clean_replacement_pr_contract_allowsri   V   s   "$%AZ=8=N*888=N888=888888N888N8888AiL888888X;.;.....;....;..................()1T1)T1111)T111)111T1111111&C!,B*CC&*CCCCC&*CCCC&CCC*CCCCCCCC{${!!$!#$3#$$$$$$$$3$$$3$$${$$$!$$$#$$$$$$$$$$r3   c                     t               } d| 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}}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 )NTr-   r7   r8   r:   r   r;   rA   r@   u   merge 필요r>   rK   rM   rF   rH   rI   r5   r	   r   rS   rT   rU   rV   rW   rX   rZ   r[   	cr]   r^   r_   r`   ra   rb   rc   rd   s	            r4   test_02_merge_true_holdsrn   a   s    AAAZ=)=M))))=M)))=))))))M)))M))))))))Qy\)>\))))>\)))>)))\)))))))r3   c                     t               } d| 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}}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 )NTr   r7   r8   r:   r   r;   rA   r@   u   same-branch push 필요r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   #test_03_same_branch_push_true_holdsrp   i   s    A AAZ=)=M))))=M)))=))))))M)))M)))))))$4)4$4444$444$4444444444r3   c                     t               } | d   dgz   | 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}}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 )Nr   scripts/finish-task.shr   r7   r8   r:   r   r;   rA   r@   u   expected_files 밖 diff 필요r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   %test_04_expected_files_mismatch_holdsrs   q   s    A !"2 37O6P PAAZ=)=M))))=M)))=))))))M)))M)))))))+;q|;+|;;;;+|;;;+;;;|;;;;;;;r3   c                     t               } d| 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}}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 )NTr!   r7   r8   r:   r   r;   rA   r@   u   credential 필요r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   !test_05_credential_required_holdsru   y   s    A&*A"#AZ=)=M))))=M)))=))))))M)))M))))))).!I,.,....,......,.......r3   c                     t               } d| 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}}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 )NTr    r7   r8   r:   r   r;   rA   r@   z
Critical 7r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   test_06_critical_7_true_holdsrw      s    AAlOAZ=)=M))))=M)))=))))))M)))M)))))))'1Y<'<<''''<<'''<'''<'''''''r3   c                     t               } d| 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}}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FAILr+   r7   r8   r:   r   r;   rA   r@   zCodex FAIL / HIGH / CRITICALr>   rK   rM   rF   rH   rI   rk   rl   s	            r4    test_07_codex_verdict_fail_holdsrz      s    AAoAZ=)=M))))=M)))=))))))M)))M))))))))9Qy\9)\9999)\999)999\9999999r3   c                     t               } ddd| 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}}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 )NTFr'   r,   r7   r8   r:   r   r;   rA   r@   u   callback contract 누락r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   test_08_callback_missing_holdsr|      s    A#7AjMAZ=)=M))))=M)))=))))))M)))M)))))))%595%5555%555%5555555555r3   c                     t               } d| d   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}}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 )NFr   r   r7   r8   r:   r   r;   rA   r@   u   source PR 원본 변경 필요r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   %test_09_source_pr_not_preserved_holdsr~      s    A"'AkN;AZ=)=M))))=M)))=))))))M)))M)))))))+;q|;+|;;;;+|;;;+;;;|;;;;;;;r3   c                     t               } d| 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}}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merge_prr   r7   r8   r:   r   r;   rA   r@   zaction_type unknownr>   rK   rM   rF   rH   rI   rk   rl   s	            r4   !test_10_action_type_unknown_holdsr      s    A!AmAZ=)=M))))=M)))=))))))M)))M))))))) 0AiL0 L0000 L000 000L0000000r3   c                     dD ]  } 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 )
N)HIGHCRITICALPASS_BUT_HIGH r+   r7   r8   r:   r   r;   rA   r@   rk   )vrm   r^   r_   r`   ra   s         r4   !test_codex_high_and_critical_holdr      s    6 8/{:&7&-7777&-777&777777-777-77777778r3   c                  4   t               } d| 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}}d
| 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 )NPASSr+   r7   r8   r:   r   r;   rA   r@   GO_READY_WITH_RECOMMENDATIONSr   )r5   r	   r   rS   rT   rU   rV   rW   rX   rZ   r[   r   )rm   r^   r_   r`   ra   s        r4   =test_pass_with_recommendations_allows_but_plain_unknown_holdsr      s    AAoA;z"4"n4444"n444"444444n444n44444448AoA;z"3"m3333"m333"333333m333m3333333r3   c                     t        dd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 )Nwrongx)r   r   r7   r8   r:   r   r;   rA   r@   c              3   $   K   | ]  }d |v  
 ywzschema validation failNr2   .0rs     r4   	<genexpr>z4test_schema_validation_fail_holds.<locals>.<genexpr>        C'1,C   r>   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyrP   rQ   rG   )r	   r   rS   rT   rU   rV   rW   rX   rZ   r[   r   )r]   r^   r_   r`   ra   re   rb   rc   s           r4   !test_schema_validation_fail_holdsr      s    G45AZ=)=M))))=M)))=))))))M)))M)))))))Ca	lCC3CCCCCCCCC3CCC3CCCCCCCCCCCCCCr3   c                     d ddddgdf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 )N*   str   r   Tr7   r8   r:   r   r;   rA   r@   
r	   r   rS   rT   rU   rV   rW   rX   rZ   r[   )badr]   r^   r_   r`   ra   s         r4   test_non_mapping_input_holdsr      s    b%!Q. .SM}-}----}---}----------------.r3   c                     t               } d| 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}}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 )Nr   r-   r7   r8   r:   r   r;   rA   r@   c              3   $   K   | ]  }d |v  
 ywr   r2   r   s     r4   r   z:test_bool_key_must_be_strict_bool_holds.<locals>.<genexpr>   r   r   r>   r   r   r   )r5   r	   r   rS   rT   rU   rV   rW   rX   rZ   r[   r   )	rm   r]   r^   r_   r`   ra   re   rb   rc   s	            r4   'test_bool_key_must_be_strict_bool_holdsr      s    AAAZ=)=M))))=M)))=))))))M)))M)))))))Ca	lCC3CCCCCCCCC3CCC3CCCCCCCCCCCCCCr3   c                     dD ]  } 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 )
N)r$   r%   Tr7   r8   r:   r   r;   rA   r@   rk   krm   r^   r_   r`   ra   s         r4   +test_real_write_and_limited_real_write_holdr      s    I 8!{:&7&-7777&-777&777777-777-77777778r3   c                  L   t               } d| 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}}t               } d
g| 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}}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 )NTr*   r7   r8   r:   r   r;   rA   r@   rr   r   zforbidden pathr>   rK   rM   rF   rH   rI   rk   )	rm   r^   r_   r`   ra   r]   rb   rc   rd   s	            r4   ,test_scope_expansion_and_forbidden_path_holdr      sG   AAA;z"3"m3333"m333"333333m333m3333333A$<#=A AZ=)=M))))=M)))=))))))M)))M)))))))+q|+|++++|++++++|+++++++r3   c                     dD ]  } 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 )
N)r.   r/   Tr7   r8   r:   r   r;   rA   r@   rk   r   s         r4   &test_auto_closeout_and_dev_status_holdr      s    3 8!{:&7&-7777&-777&777777-777-77777778r3   c                     t               } d| 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}}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 )NFr   r7   r8   r:   r   r;   rA   r@   u   fresh base 미충족r>   rK   rM   rF   rH   rI   rk   rl   s	            r4   test_fresh_base_false_holdsr      s    AAlOAZ=)=M))))=M)))=))))))M)))M)))))))!1Qy\1!\1111!\111!111\1111111r3   c                     ddd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  }t        j                  |d
         dz   d|iz  }t        t        j                  |            d x}}y )Nz Option 1 F1-solo GO-ready packetr   GO_READY)marker_kindr   	readiness pre_authorized_clean_replacementr7   r8   r:   r   r;   r>   r?   r@   )r5   r	   r   rS   rT   rU   rV   rW   rX   rY   rZ   r[   packetr]   r^   r_   r`   ra   s         r4   )test_go_ready_packet_normalization_allowsr      s    9 ,=,?	F 	AZ=8=N*888=N888=888888N888N8888AiL888888r3   c                     ddd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 )Nr   r   r   )r   r   r   r7   r8   r:   r   r;   rA   r@   r   r   s         r4   (test_go_ready_packet_without_block_holdsr      su     ]TFAZ=)=M))))=M)))=))))))M)))M)))))))r3   c                      t        j                  t        dz  dz  j                  d            } t	        t                     }|j                  } |       }t        |      }| d   }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                  |      rt        j                  |      nd	t        j                  |      t        j                  |      t        j                  |      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}x}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schemasz*pre_authorized_action_decision.schema.jsonutf-8encodingrequiredr8   )z%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.keys
}()
})
} == %(py13)s
{%(py13)s = %(py9)s(%(py11)s)
}sortedr]   )rP   r<   r=   r@   py7py9py11py13zassert %(py15)spy15additionalPropertiesFrC   rE   rF   rH   rI   )jsonloads	WORKSPACE	read_textr	   r5   keysr   rS   rT   rV   rW   rX   rU   rZ   r[   )r   r]   r_   @py_assert4@py_assert6@py_assert10@py_assert12@py_assert8@py_format14@py_format16r^   rb   rc   rd   s                 r4   )test_decision_schema_matches_emitted_keysr      s   ZZ	Y	!M	MXX 	Y 	
F
 	"$%A&&9&(96(9fZ&89v&89999999999999969996999999!999!999&999(999999999v999v999&8999999999999()2U2)U2222)U222)222U2222222r3   c            	      j   ddl m}  t        j                  t        dz  dz  j                  d            }|d   }t        |      }t        |       }||k(  }|sSt        j                  d|fd	||f      d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      t        j                  |      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  }dd|iz  }t        t        j                  |            d x}x}x}}y )Nr   )_REQUIRED_KEYSr   z*pre_authorized_action_contract.schema.jsonr   r   r   r8   )zN%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}r   r   )rP   rQ   rG   rI   r   r   zassert %(py11)sr   )!anu_v3.pre_authorized_action_gater   r   r   r   r   r   rS   rT   rV   rW   rX   rU   rZ   r[   )r   r   re   rb   r   rf   @py_format10@py_format12s           r4   /test_contract_schema_required_keys_match_moduler     s   @ZZ	Y	!M	MXX 	Y 	
F
 $?6$%?)??%)?????%)???????6???6???$???%?????????????????????)????????r3   c                 
   t         dz  dz  }t        j                  j                  d|      }g }|}|r|j                  }|}|sdddt        j                         v st        j                  |      rt        j                  |      ndiz  }|j                  |       |rlddt        j                         v st        j                  |      rt        j                  |      ndt        j                        dz  }|j                  |       t        j                  |d	      i z  }d
d|iz  }	t        t        j                  |	            dx}x}}t        j                  j                  |      }
|j                  j                  |
       | dz  }|j!                  t#        j$                  t'                     d       | dz  }|
j)                  dt+        |      dt+        |      g      }d	}||k(  }|st        j,                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}t#        j.                  |j1                               d   }|t2        k(  }|st        j,                  d|fd|t2        f      t        j                  |      dt        j                         v st        j                  t2              rt        j                  t2              nddz  }dd|iz  }t        t        j                  |            dx}}t'               }d|d<   | dz  }|j!                  t#        j$                  |      d       | d z  }|
j)                  dt+        |      dt+        |      g      }d!}||k(  }|st        j,                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}t#        j.                  |j1                               d   }|t4        k(  }|st        j,                  d|fd|t4        f      t        j                  |      d"t        j                         v st        j                  t4              rt        j                  t4              nd"dz  }dd|iz  }t        t        j                  |            dx}}y)#uU   scripts/run_pre_authorized_action_gate.py: ALLOW=0 / HOLD=2 + decision 파일 생성.scriptsz!run_pre_authorized_action_gate.pyrpagz%(py2)srQ   specz#%(py6)s
{%(py6)s = %(py4)s.loader
})rG   rI   r   zassert %(py9)sr   Nz
allow.jsonr   r   zallow-decision.jsonz--inputz--outr8   )z%(py0)s == %(py3)src)rP   r=   rA   r@   r7   r:   r   r;   Tr-   z	hold.jsonzhold-decision.jsonr   r   )r   	importlibutilspec_from_file_locationloaderrV   rW   rS   rX   rU   append_format_booloprZ   r[   module_from_specexec_module
write_textr   dumpsr5   mainr   rT   r   r   r   r   )tmp_pathrunnerr   re   r^   rf   @py_format3rd   @py_format8r   modallow_in	allow_outr   r_   r`   ra   hold_chold_inhold_outs                       r4   .test_cli_runner_writes_decision_and_exit_codesr     s   "%HHF>>11&&AD44DKKK444DDK
..
)
)$
/CKKC ,&H

#4#67'J00I	9c(mWc)nE	FBN27NNN2NNNNNN2NNN2NNNNNNNNNN::i))+,Z8J8NJJJJ8NJJJ8JJJJJJNJJJNJJJJJJJ F#F$Gtzz&)G<..H	9c'lGS]C	DBN27NNN2NNNNNN2NNN2NNNNNNNNNN::h((*+J7H7=HHHH7=HHH7HHHHHH=HHH=HHHHHHHr3   __main__z-q)9__doc__builtinsrV   _pytest.assertion.rewrite	assertionrewriterS   importlib.utilr   r   syspathlibr   pytest__file__resolveparentsr   r   pathinsertr   r   r   r   r   r	   r1   dictr5   ri   rn   rp   rs   ru   rw   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __name__
SystemExitr   r2   r3   r4   <module>r     s(  "     
  N""$,,Q/	y>!HHOOAs9~&  4 H%*5</(:6<184D.D8,829*3@I2 z
[V[[(D!12
33 r3   