Ë
    $>Ýj]5  ã            	       óL  — d 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mZ ddl	m
Z
mZ ddl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 ej2                  ej4                  z   fd
edededefd„Z G d„ dej<                  «      Z G d„ de«      Z e!dk(  r ejD                  «        yy)z]Datenschutz: deterministischer Klassifikator, Policy-Matrix, manuelle Wahl gegen Datenschutz.é    N)ÚPath)ÚPrivacyClassifier)ÚConfigurationErrorÚparse_gateway_config)Ú
AttachmentÚContextEnvelopeÚMemorySnippet)ÚPrivacyTier)ÚHandling)ÚGatewayTestCaseÚconfig_dictÚdocumentÚphotoÚprefixÚlengthÚalphabetÚreturnc                 óP   ‡— | dj                  ˆfd„t        |«      D «       «      z   S )NÚ c              3   óH   •K  — | ]  }t        j                  ‰«      –— Œ y ­w©N)ÚsecretsÚchoice)Ú.0Ú_r   s     €ú3/home/aria/aria-v3-dev/python/tests/test_privacy.pyú	<genexpr>zfake_secret.<locals>.<genexpr>   s   øè ø€ ÒL¸œGŸN™N¨8×4ÑLùs   ƒ")ÚjoinÚrange)r   r   r   s     `r   Úfake_secretr       s!   ø€ Ø�B—G‘GÓL¼eÀF»mÔLÓLÑLÐLó    c                   óŠ   — e 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„ Zd„ Zd„ Zd„ Zy)ÚClassifierTestsc                 ó"   — t        «       | _        y r   )r   Úc©Úselfs    r   ÚsetUpzClassifierTests.setUp   s   € Ü"Ó$ˆ�r!   c                 óL   — | j                   j                  t        |fi |¤Ž«      S r   )r%   Úclassifyr   ©r'   ÚtextÚkwargss      r   ÚassesszClassifierTests.assess   s   € Ø�v‰v�‰œ¨tÑ>°vÑ>Ó?Ð?r!   c                 ó<   —  | j                   |fi |¤Žj                  S r   )r.   Útierr+   s      r   r0   zClassifierTests.tier   s   € Øˆt�{‰{˜4Ñ* 6Ñ*×/Ñ/Ð/r!   c                 óÀ   — | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       y )Nu   Wie spÃ¤t ist es?r   ©ÚassertEqualr0   r
   ÚUNKNOWNr&   s    r   Útest_default_unknownz$ClassifierTests.test_default_unknown   s@   € Ø×Ñ˜Ÿ™Ð#6Ó7¼×9LÑ9LÔMØ×Ñ˜Ÿ™ 2›¬×(;Ñ(;Õ<r!   c                 ó  — | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       y )Nz#public Was ist ein Monoid?u!     #Ã¶ffentlich ErklÃ¤re Rekursionu   [public] ErklÃ¤re Rekursion)r3   r0   r
   ÚPUBLICr&   s    r   Útest_public_markerz"ClassifierTests.test_public_marker#   sb   € Ø×Ñ˜Ÿ™Ð#@ÓAÄ;×CUÑCUÔVØ×Ñ˜Ÿ™Ð#FÓGÌ×I[ÑI[Ô\Ø×Ñ˜Ÿ™Ð#@ÓAÄ;×CUÑCUÕVr!   c                 ó  — | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       y )Nu   ErklÃ¤re Rekursion #publicu   public ErklÃ¤re Rekursionu   #publicity ErklÃ¤rer2   r&   s    r   Ú test_public_marker_only_at_startz0ClassifierTests.test_public_marker_only_at_start(   sb   € Ø×Ñ˜Ÿ™Ð#?Ó@Ä+×BUÑBUÔVØ×Ñ˜Ÿ™Ð#>Ó?Ä×ATÑATÔUØ×Ñ˜Ÿ™Ð#8Ó9¼;×;NÑ;NÕOr!   c                 ó    — t        d¬«      }| j                  |j                  t        d«      «      j                  t
        j                  «       y )NF)Úpublic_marker_enabledú	#public x)r   r3   r*   r   r0   r
   r4   ©r'   Ú
classifiers     r   Útest_marker_can_be_disabledz+ClassifierTests.test_marker_can_be_disabled-   s9   € Ü&¸UÔCˆ
Ø×Ñ˜×,Ñ,¬_¸[Ó-IÓJ×OÑOÔQ\×QdÑQdÕer!   c                 ó²   — | j                  d«      }| j                  |j                  t        j                  «       | j                  d|j                  «       y )Nu   #public Angebot fÃ¼r BMWúcustomer.bmw)r.   r3   r0   r
   ÚCONFIDENTIALÚassertInÚrule_ids)r'   Ú
assessments     r   Útest_confidential_beats_markerz.ClassifierTests.test_confidential_beats_marker1   s?   € Ø—[‘[Ð!;Ó<ˆ
Ø×Ñ˜Ÿ™¬+×*BÑ*BÔCØ�‰�n j×&9Ñ&9Õ:r!   c                 óþ  — t        dj                  d„ t        d«      D «       «      dz   dt        j                  t        j
                  z   dz   «      t        dd«      t        d	d«      t        d
d«      t        ddt        j                  t        j
                  z   «      t        dd«      dz   t        dd«      z   dz   t        dd«      z   ddt        dd«      z   t        dd«      dœ	}|j                  «       D ]z  \  }}| j                  |¬«      5  | j                  d|› �«      }| j                  |j                  t        j                  «       | j                  ||j                  «       d d d «       Œ| y # 1 sw Y   Œ‡xY w)Nr   c              3   ób   K  — | ]'  }t        j                  t        j                  «      –— Œ) y ­wr   )r   r   ÚstringÚdigits)r   r   s     r   r   z7ClassifierTests.test_secret_patterns.<locals>.<genexpr>8   s   è ø€ Ò<mÐ_`¼W¿^¹^ÌFÏMÉM×=ZÑ<mùs   ‚-/é	   ú:é#   z_-zsk-é    zsk-ant-Úghp_é$   ÚAKIAé   ÚeyJé   ú.z:-----BEGIN PRIVATE KEY-----
MIIB
-----END PRIVATE KEY-----z
password: é   Ú
sb_secret_é   )	úsecret.telegram_bot_tokenzsecret.openai_keyzsecret.anthropic_keyzsecret.github_tokenzsecret.aws_access_keyz
secret.jwtzsecret.private_key_blockzsecret.assignmentzsecret.supabase_key)Úruleu   #public bitte prÃ¼fen )r    r   r   rJ   Úascii_lettersrK   Úascii_uppercaseÚitemsÚsubTestr.   r3   r0   r
   rC   rD   rE   )r'   Úcasesr[   ÚvaluerF   s        r   Útest_secret_patternsz$ClassifierTests.test_secret_patterns6   s\  € ä)4°R·W±WÑ<mÔdiÐjkÓdlÔ<mÓ5mÐpsÑ5sØ57¼×9MÑ9MÔPV×P]ÑP]Ñ9]Ð`dÑ9dó*fä!,¨U°BÓ!7Ü$/°	¸2Ó$>Ü#.¨v°rÓ#:Ü%0°¸¼V×=SÑ=SÔV\×VcÑVcÑ=cÓ%dÜ% e¨RÓ0°3Ñ6¼ÀUÈBÓ9OÑOÐRUÑUÔXcÐdfÐhjÓXkÑkØ(pØ!-´¸BÀÓ0CÑ!CÜ#.¨|¸RÓ#@ñ
ˆð !Ÿ;™;›=ò 	9‰KˆD�%Ø—‘ 4�Ó(ñ 9Ø!Ÿ[™[Ð+AÀ%ÀÐ)IÓJ�
Ø× Ñ  §¡´+×2JÑ2JÔKØ—‘˜d J×$7Ñ$7Ô8÷9ð 9ñ	9÷9ð 9ús   ÄAE3Å3E<	c                 óð  — d}d|› d�d|› d�d|› d�fD ]w  }| j                  |¬«      5  | j                  d	|z   «      }| j                  |j                  t        j
                  «       | j                  d
|j                  «       d d d «       Œy | j                  d
| j                  d|› �«      j                  «       | j                  d
| j                  d|› d�«      j                  «       y # 1 sw Y   ŒáxY w)NÚ"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz
123456789:ú-z&https://api.telegram.org/bot123456789:z-/getMez,https://api.telegram.org/file/bot1234567890:z	_/doc.pdf©r,   ú#public rZ   z#public 123456789:z#public 12345678901:)	r_   r.   r3   r0   r
   rC   rD   rE   ÚassertNotIn)r'   Úbodyr,   rF   s       r   Útest_telegram_token_edge_formsz.ClassifierTests.test_telegram_token_edge_formsI   s
  € àˆØ! $  qÐ)Ð-SÐTXÐSYÐY`Ð+aØCÀDÀ6ÈÐSðUò 	PˆDà—‘ 4�Ó(ñ PØ!Ÿ[™[¨°dÑ):Ó;�
Ø× Ñ  §¡´+×2JÑ2JÔKØ—‘Ð9¸:×;NÑ;NÔO÷Pð Pð	Pð 	×ÑÐ4°d·k±kÐDVÐW[ÐV\ÐB]Ó6^×6gÑ6gÔhØ×ÑÐ4°d·k±kÐDXÐY]ÐX^Ð^_ÐB`Ó6a×6jÑ6jÕk÷Pð Pús   ©AC,Ã,C5	c                 ó  — dD ]z  \  }}| j                  |¬«      5  | j                  d|z   «      }| j                  |j                  t        j
                  «       | j                  ||j                  «       d d d «       Œ| y # 1 sw Y   Œ‡xY w)N))úAngebot BMWrB   )zMeeting mit adessozcustomer.adesso)zSupplierPulse Backlogzcustomer.supplierpulse)zKundendaten exportierenzcustomer.kundendaten)ÚMandantenlistezcustomer.mandant)zstreng vertraulichzconfidential.markerrf   rg   ©r_   r.   r3   r0   r
   rC   rD   rE   ©r'   r,   r[   rF   s       r   Útest_customer_keywordsz&ClassifierTests.test_customer_keywordsV   sƒ   € ðrò 	9‰JˆD�$ð —‘ 4�Ó(ñ 9Ø!Ÿ[™[¨°dÑ):Ó;�
Ø× Ñ  §¡´+×2JÑ2JÔKØ—‘˜d J×$7Ñ$7Ô8÷9ð 9ñ		9÷9ð 9úó   ›ABÂB
	c                 ó  — dD ]z  \  }}| j                  |¬«      5  | j                  d|z   «      }| j                  |j                  t        j
                  «       | j                  ||j                  «       d d d «       Œ| y # 1 sw Y   Œ‡xY w)N))z!schreib an max.muster@example.orgz	pii.email)zruf +49 170 1234567 anz	pii.phone)z IBAN DE89 3704 0044 0532 0130 00zpii.iban)zGeburtsdatum eintragenzpii.keywordrf   rg   rn   ro   s       r   Útest_personal_dataz"ClassifierTests.test_personal_data`   sƒ   € ðFò 	9‰JˆD�$ð —‘ 4�Ó(ñ 9Ø!Ÿ[™[¨°dÑ):Ó;�
Ø× Ñ  §¡´+×2JÑ2JÔKØ—‘˜d J×$7Ñ$7Ô8÷9ð 9ñ		9÷9ð 9úrq   c                 ó  — | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       | j                  | j                  d«      t        j                  «       y )Nu$   Log unter /home/aria/scripts prÃ¼fenz#public Datei /root/xzdas ist intern)r3   r0   r
   ÚINTERNALr&   s    r   Útest_internal_markersz%ClassifierTests.test_internal_markersj   sb   € Ø×Ñ˜Ÿ™Ð#IÓJÌK×L`ÑL`ÔaØ×Ñ˜Ÿ™Ð#:Ó;¼[×=QÑ=QÔRØ×Ñ˜Ÿ™Ð#3Ó4´k×6JÑ6JÕKr!   c                 óú   — | j                  | j                  dt        «       f¬«      t        j                  «       t        dddd¬«      }| j                  | j                  d|f¬«      t        j                  «       y )	Nz#public Bild©Úattachmentsr   Úxzx.txts   hello world©ÚkindÚfile_idÚnameÚdataz#public Text)r3   r0   r   r
   r4   r   )r'   Úcleans     r   Útest_attachments_never_publicz-ClassifierTests.test_attachments_never_publico   s^   € Ø×Ñ˜Ÿ™ >ÄÃ¸z˜ÓJÌK×L_ÑL_Ô`Ü 
°C¸gÈNÔ[ˆØ×Ñ˜Ÿ™ >À¸x˜ÓHÌ+×J]ÑJ]Õ^r!   c                 óz   — | j                  | j                  dt        d«      f¬«      t        j                  «       y )Nú#public DateiúBMW_Angebot.pdfrx   )r3   r0   r   r
   rC   r&   s    r   Ú!test_attachment_name_confidentialz1ClassifierTests.test_attachment_name_confidentialt   s1   € Ø×Ñ˜Ÿ™ ?ÄÐJ[ÓA\Ð@^˜Ó_Ü$×1Ñ1õ	3r!   c                 ó„  — dD ]O  }| j                  |¬«      5  | j                  | j                  d|z   «      t        j                  «       d d d «       ŒQ dD ]O  }| j                  |¬«      5  | j                  | j                  d|z   «      t        j
                  «       d d d «       ŒQ y # 1 sw Y   Œ°xY w# 1 sw Y   ŒhxY w)N)r„   zKundendaten_2026.xlsxÚSupplier_PulseÚ
adesso2026Úcustomer_datarf   rg   )ÚUrkundeÚ
Kundgebungzinternationale Lage)r_   r3   r0   r
   rC   r7   ©r'   r,   s     r   Ú,test_identifiers_with_underscores_and_digitsz<ClassifierTests.test_identifiers_with_underscores_and_digitsx   sÉ   € àqò 	YˆDØ—‘ 4�Ó(ñ YØ× Ñ  §¡¨:¸Ñ+<Ó!=¼{×?WÑ?WÔX÷Yð Yð	Yð Eò 	SˆDØ—‘ 4�Ó(ñ SØ× Ñ  §¡¨:¸Ñ+<Ó!=¼{×?QÑ?QÔR÷Sð Sñ	S÷Yð Yú÷Sð Sús   ˜3B*Á,3B6Â*B3	Â6B?	c           
      ó¼   — t        ddddt        dd«      z   j                  «       ¬«      }| j                  | j	                  d|f¬	«      t
        j                  «       y )
Nr   rz   zn.txtz	password=r   rW   r{   rƒ   rx   )r   r    Úencoder3   r0   r
   rC   )r'   Ú
secret_docs     r   Ú$test_attachment_text_content_scannedz4ClassifierTests.test_attachment_text_content_scanned�   sQ   € Ü Z¸À7Ø&1´KÀÀBÓ4GÑ&G×%OÑ%OÓ%QôSˆ
à×Ñ˜Ÿ™ ?ÀÀ˜ÓNÔP[×PhÑPhÕir!   c           
      ó>  — | j                  | j                  dt        dd«      f¬«      t        j                  «       | j                  | j                  dt        ddt        j
                  «      f¬«      t        j
                  «       | j                  | j                  dt        ddt        j
                  «      f¬«      t        j                  «       | j                  | j                  dt        ddt        j                  «      f¬«      t        j                  «       y )Nr=   zbrain/aÚneutral©Úmemoryz
BMW Termin)r3   r0   r	   r
   r4   r7   rC   r&   s    r   Útest_memory_classifiedz&ClassifierTests.test_memory_classified†   sè   € Ø×Ñ˜Ÿ™ ;¼ÀiÐQZÓ8[Ð7]˜Ó^Ô`k×`sÑ`sÔtØ×Ñ˜Ÿ™ ;¼ÀiÐQZÔ\g×\nÑ\nÓ8oÐ7q˜ÓrÜ$×+Ñ+ô	-à×Ñ˜Ÿ™ ;¼ÀiÐQ]Ô_j×_qÑ_qÓ8rÐ7t˜ÓuÜ$×1Ñ1ô	3à×Ñ˜Ÿ™ ;¼ÀiÐQZÜFQ×F^ÑF^ó9`ð 8b˜ó cä$×1Ñ1õ	3r!   c           
      ó0  — | j                  | j                  dt        ddt        j                  «      f¬«      t        j
                  «       | j                  | j                  dt        ddt        j                  «      f¬«      t        j                  «       y )Nr=   zBMW-GeheimprojektzGuten Morgenr”   zbrain/tagesplan.md)r3   r0   r	   r
   r7   rC   r&   s    r   Ú#test_memory_source_label_classifiedz3ClassifierTests.test_memory_source_label_classified�   sŽ   € ð 	×ÑØ�I‰I�k¬=Ð9LÈnÜ9D×9KÑ9Kó,Mð +OˆIó Pä×$Ñ$ô	&ð
 	×ÑØ�I‰I�k¬=Ð9MÈ~Ü9D×9KÑ9Kó,Mð +OˆIó Pä×Ñõ	 r!   c                 ó¢   — t        dg¬«      }| j                  |j                  t        d«      «      j                  t
        j                  «       y )NzProjekt Falke)Úextra_confidential_keywordsz#public Projekt Falke)r   r3   r*   r   r0   r
   rC   r>   s     r   Útest_extra_keywordsz#ClassifierTests.test_extra_keywords�   s=   € Ü&ÀOÐCTÔUˆ
Ø×Ñ˜×,Ñ,¬_Ð=TÓ-UÓV×[Ñ[Ô]h×]uÑ]uÕvr!   c                 óh   — d}| j                  | j                  |«      | j                  |«      «       y )Nz#public Bitte debug mein Python)r3   r.   rŒ   s     r   Útest_deterministicz"ClassifierTests.test_deterministic¡   s)   € Ø0ˆØ×Ñ˜Ÿ™ TÓ*¨D¯K©K¸Ó,=Õ>r!   N)Ú__name__Ú
__module__Ú__qualname__r(   r.   r0   r5   r8   r:   r@   rG   rb   rj   rp   rs   rv   r�   r…   r�   r‘   r–   r˜   r›   r�   © r!   r   r#   r#      su   „ ò%ò@ò0ò=òWò
Pò
fò;ò
9ò&lò9ò9òLò
_ò
3òSòjò
3ò òwó?r!   r#   c                   óH   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚMatrixPolicyTestsc                 ó’  — | j                  «       }| j                  |j                  | j                  dd«      «      j                  d«       | j                  |j                  | j                  dd«      «      j                  d«       | j                  |j
                  d   j                  j                  j                  «       d«       y )Né   z#public Monoid?Úcodexé   zMonoid?Úclaude)	Úgatewayr3   ÚhandleÚrequestÚbackendÚadaptersÚrunnerÚcallsÚ__len__)r'   r©   s     r   Ú%test_default_matrix_codex_only_publicz7MatrixPolicyTests.test_default_matrix_codex_only_public§   s“   € Ø—,‘,“.ˆØ×Ñ˜Ÿ™¨¯©°QÐ8IÓ(JÓK×SÑSÐU\Ô]Ø×Ñ˜Ÿ™¨¯©°Q¸	Ó(BÓC×KÑKÈXÔVØ×Ñ˜×)Ñ)¨'Ñ2×9Ñ9×?Ñ?×GÑGÓIÈ1ÕMr!   c                 ó.  — | j                  «       }dD ]Q  \  }}|j                  | j                  ||«      «      }| j                  |j                  t
        j                  |«       ŒS | j                  t        | j                  j                  «      d«       y )N))é   Úhallo)é   zPfad /home/aria)é   rl   r³   )
r©   rª   r«   r3   Úhandlingr   ÚFORWARD_TO_CLAUDE_CHANNELÚlenÚsinkÚ	delivered)r'   r©   Ú
message_idr,   Úresults        r   Ú%test_default_matrix_claude_status_quoz7MatrixPolicyTests.test_default_matrix_claude_status_quo­   sz   € Ø—,‘,“.ˆØ Zò 	XÑˆJ˜Ø—^‘^ D§L¡L°¸TÓ$BÓCˆFØ×Ñ˜VŸ_™_¬h×.PÑ.PÐRVÕWð	Xð 	×Ñœ˜TŸY™Y×0Ñ0Ó1°1Õ5r!   c                 óV  — | j                  dddii«      }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  |j                  | j                  dd«      «      j                  d	«       y )
NÚprivacyÚclaude_status_quo_confidentialFé   rl   ÚPRIVACY_DENIEDé   r´   r¨   )	r©   rª   r«   r3   r·   Úcoder   ÚBLOCKEDr¬   )r'   r©   Úblockeds      r   Ú.test_status_quo_switch_off_blocks_confidentialz@MatrixPolicyTests.test_status_quo_switch_off_blocks_confidential´   s‰   € Ø—,‘, 	Ð,LÈeÐ+TÐUÓVˆØ—.‘. §¡¨a°Ó!?Ó@ˆØ×Ñ˜'×*Ñ*¨G¯L©LÐ9¼H×<LÑ<LÐN^Ð;_Ô`Ø×Ñ˜Ÿ™¨¯©°Q¸Ó(@ÓA×IÑIÈ8ÕTr!   c                 ór  — | j                  «       }|j                  | j                  dd«      «       |j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  d|j                  «       | j                  d|j                  «       | j                  d|j                  «       | j                  | j                  j                  g «       | j                  |j                  d   j                  j                  g «       y )	Né   ú/codexrL   õ   Angebot fÃ¼r BMWÚMANUAL_CHOICE_NOT_PERMITTEDÚconfidentialrB   r¦   )r©   rª   r«   r3   r·   rÅ   r   rÆ   rD   Ú
reply_textrº   r»   r­   r®   r¯   ©r'   r©   r½   s      r   Ú7test_manual_codex_against_privacy_blocked_and_explainedzIMatrixPolicyTests.test_manual_codex_against_privacy_blocked_and_explainedº   sä   € Ø—,‘,“.ˆØ�‰�t—|‘| A xÓ0Ô1Ø—‘ §¡¨QÐ0BÓ CÓDˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(×:JÑ:JÐLiÐ9jÔkØ�‰�h × 1Ñ 1Ô2Ø�‰�n f×&7Ñ&7Ô8Ø�‰�n f×&7Ñ&7Ô8Ø×Ñ˜Ÿ™×,Ñ,¨bÔ1Ø×Ñ˜×)Ñ)¨'Ñ2×9Ñ9×?Ñ?ÀÕDr!   c                 ó  — | j                  «       }|j                  | j                  dd«      «      }| j                  |j                  d«       | j                  |j
                  d   j                  j                  g «       y )Né
   õ   /codex Angebot fÃ¼r BMWrÍ   r¦   )r©   rª   r«   r3   rÅ   r­   r®   r¯   rÐ   s      r   Ú#test_one_shot_codex_against_privacyz5MatrixPolicyTests.test_one_shot_codex_against_privacyÅ   sc   € Ø—,‘,“.ˆØ—‘ §¡¨RÐ1JÓ KÓLˆØ×Ñ˜Ÿ™Ð&CÔDØ×Ñ˜×)Ñ)¨'Ñ2×9Ñ9×?Ñ?ÀÕDr!   c                 ó,  — | j                  «       }|j                  | j                  dd«      «       |j                  | j                  dd«      «      }| j                  |j                  d«       | j                  | j
                  j                  g «       y )Né   rË   rW   r´   rÍ   )r©   rª   r«   r3   rÅ   rº   r»   rÐ   s      r   Ú1test_manual_mode_never_reaches_codex_with_unknownzCMatrixPolicyTests.test_manual_mode_never_reaches_codex_with_unknownË   sl   € Ø—,‘,“.ˆØ�‰�t—|‘| B¨Ó1Ô2Ø—‘ §¡¨R°Ó 9Ó:ˆØ×Ñ˜Ÿ™Ð&CÔDØ×Ñ˜Ÿ™×,Ñ,¨bÕ1r!   c                 ób  — | j                  dddii«      }|j                  | j                  dd«      «       |j                  | j                  dd«      «      }| j                  |j                  t
        j                  «       | j                  d|j                  «       | j                  d	|j                  «       | j                  |«      D �cg c]#  }|j                  d
«      |j                  k(  sŒ"|‘Œ% c}d   }| j                  |d   d   d«       | j                  |d   d   d«       y c c}w )NÚroutingÚmanual_fallbackÚchecked_fallbacké   rË   é   rÌ   ÚCHECKED_FALLBACKu   vollstÃ¤ndiger PrÃ¼fungÚjob_idr   rÅ   Úfallback_fromr¦   )r©   rª   r«   r3   r·   r   r¸   rD   ÚflagsrÏ   Úlog_recordsÚgetrà   )r'   r©   r½   ÚrÚrecords        r   Ú,test_checked_fallback_to_claude_when_enabledz>MatrixPolicyTests.test_checked_fallback_to_claude_when_enabledÒ   sþ   € Ø—,‘, 	Ð,=Ð?QÐ+RÐSÓTˆØ�‰�t—|‘| B¨Ó1Ô2Ø—‘ §¡¨RÐ1CÓ DÓEˆØ×Ñ˜Ÿ™¬(×*LÑ*LÔMØ�‰Ð(¨&¯,©,Ô7Ø�‰Ð/°×1BÑ1BÔCØ!×-Ñ-¨gÓ6Ö[˜¸!¿%¹%À»/ÈVÏ]É]Ó:Z’!Ò[Ð\]Ñ^ˆØ×Ñ˜ 	Ñ*¨6Ñ2Ð4FÔGØ×Ñ˜ 	Ñ*¨?Ñ;¸WÕEùò \s   Ã#D,Ã1D,c                 ó2  — | j                  ddiddidœ«      }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  | j                  j                  g «       y )	NrÛ   rÜ   rÁ   F)rÚ   rÀ   é   rÔ   rÍ   )
r©   rª   r«   r3   r·   rÅ   r   rÆ   rº   r»   rÐ   s      r   Ú,test_checked_fallback_requires_claude_policyz>MatrixPolicyTests.test_checked_fallback_requires_claude_policyÝ   s…   € Ø—,‘,Ð,=Ð?QÐ+RØ,LÈeÐ+Tñ Vó Wˆà—‘ §¡¨RÐ1JÓ KÓLˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(×:JÑ:JÐLiÐ9jÔkØ×Ñ˜Ÿ™×,Ñ,¨bÕ1r!   c                 óh  — | j                  dddii«      }t        d«      D ]  }|j                  j                  dd«       Œ  |j	                  | j                  dd«      «      }| j                  |j                  t        j                  «       | j                  | j                  j                  g «       y )	NrÚ   rÛ   rÜ   r³   r¨   ÚDELIVERY_FAILEDrS   rÔ   )r©   r   Ú_healthÚrecord_failurerª   r«   r3   r·   r   rÆ   rº   r»   )r'   r©   r   r½   s       r   Ú,test_checked_fallback_respects_claude_healthz>MatrixPolicyTests.test_checked_fallback_respects_claude_healthä   s”   € Ø—,‘, 	Ð,=Ð?QÐ+RÐSÓTˆÜ�q“ò 	HˆAØ�O‰O×*Ñ*¨8Ð5FÕGð	Hà—‘ §¡¨RÐ1JÓ KÓLˆØ×Ñ˜Ÿ™¬(×*:Ñ*:Ô;Ø×Ñ˜Ÿ™×,Ñ,¨bÕ1r!   c                 óT  — t        j                  «       5 }dD ]a  }| j                  |¬«      5  | j                  t        «      5  t        t        t        |«      dd|ddgiii«      «       d d d «       d d d «       Œc 	 d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒƒxY w# 1 sw Y   y xY w)N)r¦   r¨   )r¬   rÀ   ÚmatrixÚpublicrÎ   )ÚtempfileÚTemporaryDirectoryr_   ÚassertRaisesr   r   r   r   )r'   Útmpr¬   s      r   Ú*test_config_rejects_confidential_in_matrixz<MatrixPolicyTests.test_config_rejects_confidential_in_matrixì   sË   € Ü×(Ñ(Ó*ð 	A¨cØ.ò A�Ø—\‘\¨'�\Ó2ñ A°D×4EÑ4EÔFXÓ4Yñ AÜ(¬´T¸#³YÀÈXØ (¨NÐ!;ðX=ð M>ð A?ó *@ô A÷A÷ Að AñA÷	Að 	A÷Að Aú÷ Að Aú÷	Að 	Aús:   •B­BÁ'B	Á*BÁ2
BÂBÂBÂBÂBÂB'N)rž   rŸ   r    r±   r¾   rÈ   rÑ   rÕ   rØ   rç   rê   rï   r÷   r¡   r!   r   r£   r£   ¦   s:   „ òNò6òUò	EòEò2ò	Fò2ò2óAr!   r£   Ú__main__)#Ú__doc__r   rJ   ró   ÚunittestÚpathlibr   Úaria_router.classifyr   Úaria_router.configr   r   Úaria_router.contextr   r   r	   Úaria_router.corer
   Úaria_router.gatewayr   Útests.helpersr   r   r   r   r\   rK   ÚstrÚintr    ÚTestCaser#   r£   rž   Úmainr¡   r!   r   ú<module>r     s®   ðÙ cÛ Û Û Û Ý å 2ß Gß JÑ JÝ (Ý (ç GÓ Gð ;A×:NÑ:NÐQW×Q^ÑQ^Ñ:^ñ M˜ð M Sð M°Cð MÐcfó MôN?�h×'Ñ'ô N?ôbKA˜ô KAð\ ˆzÒØ€H‡M�M…Oð r!   