§
    7>º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
Z
ddlZddl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 ddlmZ ddlmZmZ d	„ Zd
„ Zd„ Zd„ Zd„ Z dS )zR
AutoPOE2 - Unit Tests for Invariants & Safety Sentinel Fixes (Audit 28/09/2026).
é    N)ÚERR_BOGUS_VITAL_STRUCT_778ÚERR_XYZ_FROZEN_AT_ORIGINÚInvariantSentinel)ÚMultimodalFlightRecorder)ÚRealtimeWatcher)ÚMasterInvariantsSentinel)ÚZeroDayInvariantGate)ÚCoreTelemetrySnapshotÚPlayerTelemetryc                  ó¢  — ddddddœdddœ} t          j        | ¦  «        }t          |v }|sÑt          j        d	|fd
t          |f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d}t          j        | ¦  «        }t          |v }|sÑt          j        d	|fd
t          |f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d}t          |v}|sÑt          j        d|fdt          |f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d}dS )u[   Báº¯t buá»™c phÃ¡t hiá»‡n struct rÃ¡c 778/778 khi telemetry lÃ  dictionary lá»“ng 'player'.é
  g      Y@g      i@ç        ©Ú
current_hpÚmax_hpÚpos_xÚpos_yÚpos_zúSandswept Marshé   )ÚplayerÚ	area_nameÚmonsters_count©Úin)z%(py0)s in %(py2)sr   Úvitals_anomalies)Úpy0Úpy2zassert %(py4)sÚpy4NÚall_anomalies)únot in)z%(py0)s not in %(py2)sr   )r   Úcheck_vitals_invariantsr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚ	check_allr   )Úraw_dictr   Ú@py_assert1Ú@py_format3Ú@py_format5r    s         ú9C:\Projects\AutoPOE2\tests\test_audit_invariants_fixes.pyÚ!test_dict_nested_player_detectionr1      s  € ð ØØØØð
ð 
ð 'Øð
ð 
€Hõ )Ô@ÀÑJÔJÐÝ%Ð)9Ð9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Õ%Ð)9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9Õ%Ñ9Ô9Ð9Õ9Ô9Õ%Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9Ð)9Ñ9Ô9Ð9Õ9Ô9Ð)9Ñ9Ô9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9å%Ô/°Ñ9Ô9€MÝ%¨Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Õ%¨Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6Õ%Ñ6Ô6Ð6Õ6Ô6Õ%Ñ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨Ñ6Ô6Ð6Õ6Ô6¨Ñ6Ô6Ð6Ð6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ý#¨=Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Õ#¨=Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8Õ#Ñ8Ô8Ð8Õ8Ô8Õ#Ñ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¨=Ñ8Ô8Ð8Õ8Ô8¨=Ñ8Ô8Ð8Ð8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8ó    c            	      ó¨  ‡— t          j        d¬¦  «        Š	 t          ‰d¬¦  «        } t          d¦  «        D ]7}|                      d|› �dgdd	d	d
œi¬¦  «         t          j        d¦  «         Œ8ˆfd„t          j        ‰¦  «        D ¦   «         }t          |¦  «        }d}||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        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}t%          j        ‰d¬¦  «         dS # t%          j        ‰d¬¦  «         w xY w)uX   Kiá»ƒm tra cÆ¡ cháº¿ dá»�n dáº¹p thÆ° má»¥c incident khi vÆ°á»£t max_retained_incidents.Útest_rotation_©Úprefixé   )Ú
output_dirÚmax_retained_incidentsr   ÚTEST_INCIDENT_úINV-TEST-01r   éd   )Úhpr   )Úincident_typeÚviolated_invariantsÚ	telemetryg{®Gáz”?c                 ó¸   •— g | ]V}|                      d ¦  «        ¯t          j                             t          j                             ‰|¦  «        ¦  «        ¯T|‘ŒWS ©Ú	INCIDENT_©Ú
startswithÚosÚpathÚisdirÚjoin©Ú.0ÚdÚtemp_dirs     €r0   ú
<listcomp>z:test_flight_recorder_incident_rotation.<locals>.<listcomp>:   óW   ø€ ÐzÐzÐz�a°1·<²<ÀÑ3LÔ3LÐzÕQSÔQX×Q^ÒQ^Õ_aÔ_f×_kÒ_kÐltÐvwÑ_xÔ_xÑQyÔQyÐz�ÐzÐzÐzr2   )ú<=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)sÚlenÚdirs©r   Úpy1Úpy3Úpy6úassert %(py8)sÚpy8NT©Úignore_errors)ÚtempfileÚmkdtempr   ÚrangeÚpackage_incidentÚtimeÚsleeprF   ÚlistdirrQ   r#   r$   r%   r&   r'   r(   r)   r*   ÚshutilÚrmtree)	ÚrecorderÚirR   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9rM   s	           @r0   Ú&test_flight_recorder_incident_rotationrk   -   s	  ø€ åÔÐ'7Ð8Ñ8Ô8€Hð4Ý+°xÐXYÐZÑZÔZˆÝ�q‘”ð 	ð 	ˆAØ×%Ò%Ø2¨qÐ2Ð2Ø%2 OØ#¨C¸3Ð%?Ð%?Ð@ð &ñ ô ð õ
 ŒJ�tÑÔÐÐàzÐzÐzÐz�2œ: hÑ/Ô/ÐzÑzÔzˆÝ�4‰yŒyÐ˜AÐˆy˜AŠ~ÐÐÐÕÔÐÐÐÐˆy˜AÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�4ÑÔÐÕÔ�4ÑÔÐÐÕÔˆyÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐåŒ�h¨dÐ3Ñ3Ô3Ð3Ð3Ð3ø�Œ�h¨dÐ3Ñ3Ô3Ð3Ð3øøøs   ˜F	F9 Æ9Gc                  óX  — t          j        d¬¦  «        } t          j                             | d¦  «        }	 t          | |¬¦  «        }|                     ddd¬¦  «        }t          j                             |¦  «        }t          j                             |d	¦  «        }t          |d
d¬¦  «        5 }t          j
        |¦  «        }ddd¦  «         n# 1 swxY w Y   |d         d         }d}	||	k    }
|
slt          j        d|
fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	|d         d         }d}	||	k    }
|
slt          j        d|
fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	|d         d         }d}	||	u }
|
slt          j        d|
fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}	t!          j        | d¬¦  «         dS # t!          j        | d¬¦  «         w xY w)ud   Kiá»ƒm tra package_invariant_incident khÃ´ng bá»‹a Ä‘áº·t sá»‘ liá»‡u Monk CI khi telemetry is None.Útest_master_r5   zLATEST_INCIDENT.json)Úincidents_dirÚlatest_pointer_filer;   zTest messageN)Úinvariant_codeÚmessager@   zram_snapshot.jsonÚrzutf-8)Úencodingr   r=   r   ©ú==)z%(py1)s == %(py4)s)rT   r   zassert %(py6)srV   ÚesÚ
provenanceÚrule_14_compliantT)Úis)z%(py1)s is %(py4)srY   )r[   r\   rF   rG   rI   r   Úpackage_invariant_incidentÚdirnameÚopenÚjsonÚloadr#   r$   r(   r)   r*   rb   rc   )rM   Úptr_fileÚsentinelÚdossier_pathÚinc_dirÚram_fileÚfÚramÚ@py_assert0Ú@py_assert3rf   r/   ri   s                r0   Ú(test_master_sentinel_zero_mock_telemetryrˆ   @   sF  € åÔ ~Ð6Ñ6Ô6€HÝŒw�|Š|˜HÐ&<Ñ=Ô=€Hð4Ý+¸(ÐX`ÐaÑaÔaˆØ×:Ò:Ø(Ø"Øð ;ñ 
ô 
ˆõ
 ”'—/’/ ,Ñ/Ô/ˆÝ”7—<’< Ð)<Ñ=Ô=ˆÝ�(˜C¨'Ð2Ñ2Ô2ð 	°aÝ”)˜A‘,”,ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �8Œ}˜TÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�8Œ}˜TÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�<Ô Ð!4Ô5Ð=¸Ð=Ð5¸Ð=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð5¸Ð=Ñ=Ô=Õ=Ô=Ð5Ñ=Ô=Õ=Ô=¸Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=åŒ�h¨dÐ3Ñ3Ô3Ð3Ð3Ð3ø�Œ�h¨dÐ3Ñ3Ô3Ð3Ð3øøøs1   ·A:J Â1CÃJ ÃCÃJ ÃCÃFJ ÊJ)c                  óò  ‡
— t          j        d¬¦  «        Š
	 t          ‰
¬¦  «        } t          | ¬¦  «        }d|_        t          ddddd¬¦  «        }t          d	d
d|d¬¦  «        }|                     |d	¬¦  «         |                     |d	¬¦  «         ˆ
fd„t          j	        ‰
¦  «        D ¦   «         }t          |¦  «        }d
}||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        |¦  «        dœz  }dd|iz  }	t#          t          j        |	¦  «        ¦  «        ‚dx}x}}t'          j        ‰
d	¬¦  «         dS # t'          j        ‰
d	¬¦  «         w xY w)uT   Kiá»ƒm tra RealtimeWatcher khÃ´ng flood xuáº¥t file incident liÃªn tá»¥c má»—i tick.Útest_watcher_debounce_r5   )r8   )Úflight_recorderg       @r   r   r   Té   iè  r   )Ú	is_onlineÚsnapshot_idÚtimestamp_msr   r   )ÚsnapshotÚtrigger_incident_exportc                 ó¸   •— g | ]V}|                      d ¦  «        ¯t          j                             t          j                             ‰|¦  «        ¦  «        ¯T|‘ŒWS rB   rD   rJ   s     €r0   rN   z2test_realtime_watcher_debounce.<locals>.<listcomp>g   rO   r2   rt   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srQ   rR   rS   rW   rX   NrY   )r[   r\   r   r   Úincident_debounce_sr   r
   Úprocess_telemetryrF   ra   rQ   r#   r$   r%   r&   r'   r(   r)   r*   rb   rc   )rd   ÚwatcherÚpÚsnaprR   rf   rg   rh   ri   rj   rM   s             @r0   Útest_realtime_watcher_debouncer˜   W   s  ø€ åÔÐ'?Ð@Ñ@Ô@€Hð4Ý+°xÐ@Ñ@Ô@ˆÝ!°(Ð;Ñ;Ô;ˆØ&)ˆÔ#å s°3¸cÈÐTWÐXÑXÔXˆÝ$¨tÀÐQUÐ^_Ðk|Ð}Ñ}Ô}ˆð 	×!Ò!¨4ÈÐ!ÑNÔNÐNà×!Ò!¨4ÈÐ!ÑNÔNÐNàzÐzÐzÐz�2œ: hÑ/Ô/ÐzÑzÔzˆÝ�4‰yŒyÐ˜AÐˆy˜AŠ~ÐÐÐÕÔÐÐÐÐˆy˜AÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�4ÑÔÐÕÔ�4ÑÔÐÐÕÔˆyÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐåŒ�h¨dÐ3Ñ3Ô3Ð3Ð3Ð3ø�Œ�h¨dÐ3Ñ3Ô3Ð3Ð3øøøs   ˜F.G ÇG6c                  óÌ  — t           j        } d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d	}|| v }|s—t          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}}t          | ¦  «        }d
}||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        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}dS )uH   XÃ¡c nháº­n ZeroDayInvariantGate bao phá»§ Ä‘áº§y Ä‘á»§ 20 Báº¥t biáº¿n.zINV-WAYSTONE-ROW1-ONLYr   )z%(py1)s in %(py3)sÚcodes)rT   rU   zassert %(py5)sÚpy5NzINV-MOTION-INTEGRITYé   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)srQ   rS   rW   rX   )r	   ÚMASTER_INVARIANT_CODESr#   r$   r(   r%   r&   r'   r)   r*   rQ   )	rš   r†   rf   Ú@py_format4Ú@py_format6rg   rh   ri   rj   s	            r0   Ú*test_zero_day_gate_all_20_invariants_countr¡   m   sµ  € å Ô7€EØ#Ð,Ð# uÐ,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð# uÐ,Ñ,Ô,Õ,Ô,Ð#Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, uÑ,Ô,Ð,Õ,Ô, uÑ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ø!Ð*Ð! UÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð! UÐ*Ñ*Ô*Õ*Ô*Ð!Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* UÑ*Ô*Ð*Õ*Ô* UÑ*Ô*Ð*Ð*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ýˆu‰:Œ:Ð˜Ðˆ:˜ÒÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr2   )!Ú__doc__Úbuiltinsr%   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter#   r}   rF   rb   r[   r_   ÚpytestÚ%src.agentic_engine.invariant_sentinelr   r   r   Ú"src.agentic_engine.flight_recorderr   Ú#src.agentic_engine.realtime_watcherr   Ú-src.agentic_engine.master_invariants_sentinelr   Ú src.assistant_tool.zero_day_gater	   Ú"src.assistant_tool.core_shm_bridger
   r   r1   rk   rˆ   r˜   r¡   © r2   r0   ú<module>r¯      sK  ððð ð € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð
 HÐ GÐ GÐ GÐ GÐ GØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø RÐ RÐ RÐ RÐ RÐ RØ AÐ AÐ AÐ AÐ AÐ AØ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uð9ð 9ð 9ð*4ð 4ð 4ð&4ð 4ð 4ð.4ð 4ð 4ð,ð ð ð ð r2   