§
    Û.¯jq  ã                  óÐ   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZmZ ddlZddlmZmZ ddlmZ ej        d„ ¦   «         Z G d„ d	¦  «        Z G d
„ d¦  «        ZdS )uø  AutoPOE2 - Closed-Loop Motion Integrity & Hardware Fallback Test Suite (Doc 69 / SSoT 2026).
===========================================================================================
Domain: SÆ° Ä‘oÃ n 4: LEAD_QA_GOVERNANCE (Quáº£n trá»‹ cháº¥t lÆ°á»£ng & Báº¥t biáº¿n).
Kiá»ƒm thá»­ báº¥t biáº¿n cá»‘t lÃµi: INV-MOTION-INTEGRITY
- XÃ¡c nháº­n Delta XYZ > 0 (RAM Telemetry) HOáº¶C Delta Optical > 15px (Vision Optical Flow).
- PhÃ¡t hiá»‡n nhÃ¢n váº­t tÃª liá»‡t ngoÃ i thá»±c Ä‘á»‹a (Delta XYZ == 0 vÃ  Delta Optical <= 15px sau WASD >= 300ms).
- KÃ­ch hoáº¡t cÆ¡ cháº¿ Fail-Closed (ARS = 0.0%) vÃ  Hardware Fallback (Release keys, Refocus, Radial Nudge).
- Triá»‡t tiÃªu hoÃ n toÃ n cÄƒn bá»‡nh "Green Tests, Dead Product" vÃ  bÃ¡o cÃ¡o tiáº¿n Ä‘á»™ áº£o.
é    )ÚannotationsN)Ú	MagicMockÚpatch)ÚInvariantStatusÚMasterInvariantsSentinel)ÚAutonomousMappingCoordinatorc               #  ó  K  — t          j        d¬¦  «        } t          j                             | d¦  «        }t          j                             | d¦  «        }t          ||¬¦  «        }| |||dœV — t          j        | d¬¦  «         d	S )
u,   Táº¡o mÃ´i trÆ°á»�ng cÃ´ láº­p cho Sentinel.Úmotion_sentinel_test_)ÚprefixÚ	incidentszLATEST_INCIDENT.json)Úincidents_dirÚlatest_pointer_file©Útemp_dirr   Úpointer_fileÚsentinelT)Úignore_errorsN)ÚtempfileÚmkdtempÚosÚpathÚjoinr   ÚshutilÚrmtreer   s       ú3C:\Projects\AutoPOE2\tests\test_motion_integrity.pyÚsentinel_envr      s¥   è è € õ ÔÐ'>Ð?Ñ?Ô?€HÝ”G—L’L ¨;Ñ7Ô7€MÝ”7—<’< Ð*@ÑAÔA€Lå'Ø#Ø(ðñ ô €Hð Ø&Ø$Øð	ð ð ð ð õ „M�(¨$Ð/Ñ/Ô/Ð/Ð/Ð/ó    c                  ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestMotionIntegritySentinelua   Kiá»ƒm tra logic tháº©m Ä‘á»‹nh báº¥t biáº¿n INV-MOTION-INTEGRITY cá»§a MasterInvariantsSentinel.c                ón  — |d         }|                      dddd¬¦  «        }|j        }t          j        }||k    }|sòt	          j        d|fd||f¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	t	          j	        |¦  «        d
t          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nd
t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}	||	k    }|sªt	          j        d|fd||	f¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	t	          j	        |¦  «        t	          j	        |	¦  «        dœz  }
dd|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}	d}|j        }	||	v }|sªt	          j        d|fd||	f¦  «        t	          j	        |¦  «        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}}	dS )uc   TrÆ°á»�ng há»£p 1: NhÃ¢n váº­t di chuyá»ƒn thá»±c táº¿ qua RAM Telemetry (Delta XYZ > 0) -> PASSED.r   g     €2@ç        ç      |@T©Ú	delta_xyzÚdelta_optical_pxÚdwell_msÚ	wasd_sent©ú==©zJ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PASSED
}Úresr   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8NúINV-MOTION-INTEGRITY©z,%(py2)s
{%(py2)s = %(py0)s.code
} == %(py5)s©r-   r.   Úpy5úassert %(py7)sÚpy7zDelta XYZ=18.5u > 0©Úin©z0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.evidence
}©Úpy1Úpy3r6   ©Úaudit_inv_motion_integrityÚstatusr   ÚPASSEDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚcodeÚevidence©Úselfr   r   r+   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert4Ú@py_format6Ú@py_format8Ú@py_assert0Ú@py_assert2s                 r   Ú;test_motion_integrity_passes_with_positive_ram_displacementzWTestMotionIntegritySentinel.test_motion_integrity_passes_with_positive_ram_displacement4   s  € à-9¸*Ô-EˆØ×1Ò1ØØ ØØð	 2ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØŒxÐ1Ð1Ð1ˆxÐ1Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆxÐ1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Ð1Õ1Ô1ˆ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Ð1Ð1Ð1Ð1Ø$Ð4¨¬Ð4Ð$¨Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð$¨Ð4Ñ4Ô4Õ4Ô4Ð$Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4¨Ñ4Ô4Ð4Õ4Ô4¨Ñ4Ô4Ð4Ð4Õ4Ô4¨Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r   c                ón  — |d         }|                      dddd¬¦  «        }|j        }t          j        }||k    }|sòt	          j        d|fd||f¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	t	          j	        |¦  «        d
t          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nd
t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}	||	k    }|sªt	          j        d|fd||	f¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	t	          j	        |¦  «        t	          j	        |	¦  «        dœz  }
dd|
iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}	d}|j        }	||	v }|sªt	          j        d|fd||	f¦  «        t	          j	        |¦  «        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}}	dS )uk   TrÆ°á»�ng há»£p 2: Telemetry RAM trá»… nhÆ°ng Camera quang há»�c phÃ¡t hiá»‡n thay Ä‘á»•i > 15px -> PASSED.r   r!   g      @@r"   Tr#   r(   r*   r+   r   r,   r1   r2   Nr3   r4   r5   r7   r8   zDelta Optical=32.0px > 15pxr9   r;   r<   r?   rM   s                 r   Ú?test_motion_integrity_passes_with_positive_optical_displacementz[TestMotionIntegritySentinel.test_motion_integrity_passes_with_positive_optical_displacementB   s  € à-9¸*Ô-EˆØ×1Ò1ØØ!ØØð	 2ñ 
ô 
ˆð ŒzÐ3�_Ô3Ð3ˆzÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆzÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3ˆzÑ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�_Ñ3Ô3Ð3Õ3Ô3�_Ñ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØŒxÐ1Ð1Ð1ˆxÐ1Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆxÐ1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Õ1Ô1ˆsÑ1Ô1Ð1Ð1Õ1Ô1ˆ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Ð1Ð1Ð1Ð1Ø,Ð<°´Ð<Ð,°Ð<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð,°Ð<Ñ<Ô<Õ<Ô<Ð,Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<°Ñ<Ô<Ð<Õ<Ô<°Ñ<Ô<Ð<Ð<Õ<Ô<°Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r   c                ó
  — |d         }|                      ddddd¬¦  «        }|j        }t          j        }||k    }|sòt	          j        d|fd||f¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	t	          j	        |¦  «        d
t          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nd
t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}d}	|j        }
|	|
v }|sªt	          j        d|fd|	|
f¦  «        t	          j	        |	¦  «        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}}
d}	|j        }
|	|
v }|sªt	          j        d|fd|	|
f¦  «        t	          j	        |	¦  «        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}}
|                     ddi¬¦  «        }|j        }d}
||
u }|sªt	          j        d|fd||
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|j        }d}
||
k    }|sªt	          j        d|fd||
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|j        }d}
||
k    }|sªt	          j        d|fd||
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
dS ) ux   TrÆ°á»�ng há»£p 3: NhÃ¢n váº­t tÃª liá»‡t hoÃ n toÃ n (Delta XYZ == 0 VÃ€ Delta Optical <= 15) -> BLOCKED (Fail-Closed).r   r!   r"   TF)r$   r%   r&   r'   Úhardware_fallback_triggeredr(   )zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.BLOCKED
}r+   r   r,   r1   r2   Nu   VI PHáº M NGHIÃŠM TRá»ŒNGr9   r;   r<   r7   r8   u"   nhÃ¢n váº­t tÃª liá»‡t hoÃ n toÃ nr3   )Úcustom_overrides©Úis)zA%(py2)s
{%(py2)s = %(py0)s.is_cleared_for_autonomous
} is %(py5)sÚreportr5   é   )ú>=)z5%(py2)s
{%(py2)s = %(py0)s.blocked_count
} >= %(py5)s)z@%(py2)s
{%(py2)s = %(py0)s.autonomy_readiness_score
} == %(py5)s)r@   rA   r   ÚBLOCKEDrC   rD   rE   rF   rG   rH   rI   rJ   rL   Úaudit_all_invariantsÚis_cleared_for_autonomousÚblocked_countÚautonomy_readiness_score)rN   r   r   r+   rO   rP   rQ   rR   rS   rW   rT   rX   rU   rV   ra   s                  r   Ú7test_motion_integrity_blocks_when_paralyzed_fail_closedzSTestMotionIntegritySentinel.test_motion_integrity_blocks_when_paralyzed_fail_closedP   sÜ  € à-9¸*Ô-EˆØ×1Ò1ØØ ØØØ(-ð 2ñ 
ô 
ˆð ŒzÐ4�_Ô4Ð4ˆzÐ4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ˆzÐ4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Ð4Õ4Ô4ˆzÑ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�_Ñ4Ô4Ð4Õ4Ô4�_Ñ4Ô4Ð4Ð4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø*Ð:¨c¬lÐ:Ð*¨lÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð*¨lÐ:Ñ:Ô:Õ:Ô:Ð*Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¨cÑ:Ô:Ð:Õ:Ô:¨cÑ:Ô:Ð:Ð:Õ:Ô:¨lÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø3ÐC°s´|ÐCÐ3°|ÐCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ3°|ÐCÑCÔCÕCÔCÐ3ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC°sÑCÔCÐCÕCÔC°sÑCÔCÐCÐCÕCÔC°|ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCð ×.Ò.ÐAWÐY^Ð@_Ð.Ñ`Ô`ˆØÔ/Ð8°5Ð8Ð/°5Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð/°5Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Õ8Ô8ˆvÑ8Ô8Ð8Ð8Õ8Ô8Ð/Ñ8Ô8Õ8Ô8°5Ñ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ØÔ#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(ˆvÑ(Ô(Ð(Ð(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ.Ð5°#Ð5Ð.°#Ò5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð.°#Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆvÑ5Ô5Ð5Õ5Ô5ˆvÑ5Ô5Ð5Ð5Õ5Ô5Ð.Ñ5Ô5Õ5Ô5°#Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r   c                óæ	  — |d         }|                      dddddddd	œd
dddœdddddœ¬¦  «        }t          j        }|j        } ||¦  «        }|sæd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        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}t          j                             |¦  «        }t          j        }|j        }t          j        }|j        }	d}
 |	||
¦  «        } ||¦  «        }|�szd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t          j        |¦  «        t          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}	x}
x}}t          j        }|j        }t          j        }|j        }	d}
 |	||
¦  «        } ||¦  «        }|�szd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t          j        |¦  «        t          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}	x}
x}}dS )ur   TrÆ°á»�ng há»£p 4: Khi xáº£y ra vi pháº¡m tÃª liá»‡t, tá»± Ä‘á»™ng Ä‘Ã³ng gÃ³i há»“ sÆ¡ sá»± cá»‘ 6 thÃ nh pháº§n.r   r3   uW   NhÃ¢n váº­t cáº¥p 90 Ä‘á»©ng yÃªn táº¡i Hideout: Delta XYZ=0.0u sau nhá»‹p WASD 1500ms!rb   i¼  ç      Y@g      i@r!   )ÚhpÚesÚpos_xÚpos_yÚpos_ziÜ  )ÚplayerÚwasd_dwell_msr$   r%   u\   PhÃ¡t hiá»‡n lá»‡nh WASD Ä‘Æ°á»£c gá»­i xuá»‘ng nhÆ°ng DirectInput bá»‹ DirectX 12 bá»� qua.u/   Vi pháº¡m INV-MOTION-INTEGRITY: delta_xyz == 0.uV   KÃ­ch hoáº¡t closed-loop verification vÃ  Hardware Fallback trong send_wasd_direction.u7   KhÃ³a cháº·n báº±ng unit test test_motion_integrity.py.)Ústep1_traceÚstep2_invariantÚstep3_refactorÚ
step4_lock)Úinvariant_codeÚmessageÚ	telemetryÚ	rca_noteszbassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}r   Údossier_path)r-   r.   r/   r6   r8   Nzincident_dossier.jsonzÃassert %(py16)s
{%(py16)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py14)s
{%(py14)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.path
}.join
}(%(py10)s, %(py12)s)
})
}Úincident_dir)
r-   r.   r/   r6   r8   Úpy9Úpy10Úpy12Úpy14Úpy16zRCA_4_STEPS_ANALYSIS.md)Úpackage_invariant_incidentr   r   ÚexistsrE   rF   rC   rG   rH   rI   rJ   Údirnamer   )rN   r   r   r{   rO   rQ   Ú@py_assert6rV   r|   Ú@py_assert8Ú@py_assert11Ú@py_assert13Ú@py_assert15Ú@py_format17s                 r   Ú<test_motion_integrity_packages_incident_dossier_on_paralysiszXTestMotionIntegritySentinel.test_motion_integrity_packages_incident_dossier_on_paralysise   sè  € à-9¸*Ô-Eˆà×:Ò:Ø1Ømà!"¨$¸ÈÐY\Ð]Ð]Ø!%Ø Ø$'ð	ð ð  ~Ø#TØ"zØWð	ð ð ;ñ 
ô 
ˆõ" ŒwÐ+ˆwŒ~Ð+ˆ~ˆ~˜lÑ+Ô+Ð+Ð+Ð+Ð+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+�rÑ+Ô+Ð+Õ+Ô+�rÑ+Ô+Ð+Ð+Õ+Ô+ˆwÑ+Ô+Õ+Ô+ˆ~Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+˜lÑ+Ô+Ð+Õ+Ô+˜lÑ+Ô+Ð+Ð+Õ+Ô+Ð+Ñ+Ô+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ý”w—’ |Ñ4Ô4ˆÝŒwÐRˆwŒ~ÐR�bœgÐR˜gœlÐRÐ9PÐR˜l˜l¨<Ð9PÑQÔQÐRˆ~ˆ~ÐQÑRÔRÐRÐRÑRÐRÐRÕRÔRÑRÔRÐRÐRÕRÔR�rÑRÔRÐRÕRÔR�rÑRÔRÐRÐRÕRÔRˆwÑRÔRÕRÔRˆ~ÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR�bÑRÔRÐRÕRÔR�bÑRÔRÐRÐRÕRÔR˜gÑRÔRÕRÔR˜lÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR¨<ÑRÔRÐRÕRÔR¨<ÑRÔRÐRÐRÕRÔRÐ9PÑRÔRÕRÔRÐQÑRÔRÕRÔRÐRÑRÔRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÝŒwÐTˆwŒ~ÐT�bœgÐT˜gœlÐTÐ9RÐT˜l˜l¨<Ð9RÑSÔSÐTˆ~ˆ~ÐSÑTÔTÐTÐTÑTÐTÐTÕTÔTÑTÔTÐTÐTÕTÔT�rÑTÔTÐTÕTÔT�rÑTÔTÐTÐTÕTÔTˆwÑTÔTÕTÔTˆ~ÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔT�bÑTÔTÐTÕTÔT�bÑTÔTÐTÐTÕTÔT˜gÑTÔTÕTÔT˜lÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔT¨<ÑTÔTÐTÕTÔT¨<ÑTÔTÐTÐTÕTÔTÐ9RÑTÔTÕTÔTÐSÑTÔTÕTÔTÐTÑTÔTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTÐTr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rY   r[   ri   r‹   © r   r   r   r   1   s[   € € € € € ØkÐkð5ð 5ð 5ð=ð =ð =ð6ð 6ð 6ð*Uð Uð Uð Uð Ur   r   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú)TestCoordinatorMotionIntegrityIntegrationuN   Kiá»ƒm tra tÃ­ch há»£p INV-MOTION-INTEGRITY vÃ o AutonomousMappingCoordinator.c           
     ó  — t          d¬¦  «        }d}d}|j        }d} ||||¬¦  «        }d}||u }|�sLt          j        d|fd||f¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}x}x}x}}dS )uX   XÃ¡c nháº­n verify_motion_integrity tráº£ vá»� True khi cÃ³ dá»‹ch chuyá»ƒn tá»�a Ä‘á»™.T©Úis_simulated©rk   rk   )g     À\@g     @Z@r!   )Úoptical_delta_pxr_   )z�%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.verify_motion_integrity
}(%(py3)s, %(py4)s, optical_delta_px=%(py6)s)
} is %(py11)sÚcoordÚpos0Úpos1)r-   r.   r>   r/   r0   r2   Úpy11zassert %(py13)sÚpy13N)
r   Úverify_motion_integrityrC   rD   rE   rF   rG   rH   rI   rJ   )rN   r˜   r™   rš   rO   rP   Ú@py_assert7Ú@py_assert10Ú@py_assert9Ú@py_format12Ú@py_format14s              r   Ú1test_coordinator_verify_motion_integrity_positivez[TestCoordinatorMotionIntegrityIntegration.test_coordinator_verify_motion_integrity_positiveƒ   sÁ  € å,¸$Ð?Ñ?Ô?ˆØˆØˆàÔ,ÐVÈ#ÐVÐ,Ð,¨T°4È#ÐNÑNÔNÐVÐRVÐVÐNÐRVÐVÐVÐVÑVÕVÔVÐVÐVÐVÐVÐNÐRVÐVÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔVˆuÑVÔVÐVÕVÔVˆuÑVÔVÐVÐVÕVÔVÐ,ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV¨TÑVÔVÐVÕVÔV¨TÑVÔVÐVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔV°4ÑVÔVÐVÕVÔV°4ÑVÔVÐVÐVÕVÔVÈ#ÑVÔVÕVÔVÐNÑVÔVÕVÔVÐRVÑVÔVÐVÐVÑVÐVÐVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVr   c                ó†  — t          d¬¦  «        }t          ¦   «         |_        d}d}|                     ||dd¬¦  «        }d}||u }|s—t	          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}}|j        }|j        }	d}
|	|
k    }|s½t	          j        d|fd|	|
f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |	¦  «        t	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	x}}
dS )ua   XÃ¡c nháº­n verify_motion_integrity kÃ­ch hoáº¡t trigger_hardware_motion_fallback khi tÃª liá»‡t.Tr”   r–   g      @g     @@)r—   r&   Fr_   ©z%(py0)s is %(py3)sr+   ©r-   r>   úassert %(py5)sr6   Nrb   r(   )zh%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.trigger_hardware_motion_fallback
}.call_count
} == %(py7)sr˜   ©r-   r.   r/   r8   úassert %(py9)sr}   )r   r   Ú trigger_hardware_motion_fallbackr�   rC   rD   rE   rF   rG   rH   rI   rJ   Ú
call_count)rN   r˜   r™   rš   r+   rX   rO   Ú@py_format4rU   rQ   r…   rP   rV   Ú@py_format10s                 r   ÚPtest_coordinator_verify_motion_integrity_triggers_hardware_fallback_on_paralysiszzTestCoordinatorMotionIntegrityIntegration.test_coordinator_verify_motion_integrity_triggers_hardware_fallback_on_paralysis‹   s  € å,¸$Ð?Ñ?Ô?ˆÝ1:±´ˆÔ.àˆØˆà×+Ò+¨D°$ÈÐW\Ð+Ñ]Ô]ˆØÐˆs�eˆ|ÐÐÐÕÔÐÐÐÐˆs�eÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�eÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ5ÐEÐ5Ô@ÐEÀAÐEÐ@ÀAÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ@ÀAÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆuÑEÔEÐEÕEÔEˆuÑEÔEÐEÐEÕEÔEÐ5ÑEÔEÕEÔEÐ@ÑEÔEÕEÔEÀAÑEÔEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEr   c                óh  — t          d¬¦  «        }t          d¬¦  «        |_        ddg}t          |¬¦  «        |_        t          d¬¦  «        |_        t          dd¬¦  «        5  t          d	d¬¦  «        5  |                     d
dd¬¦  «        }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d}||u }|s—t          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}}|j        }|j        }d}	||	k    }
|
s½t          j        d|
fd||	f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	|j        }|j        }d}	||	k    }
|
s½t          j        d|
fd||	f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	|j        j        \  }}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )#us   XÃ¡c nháº­n send_wasd_direction trong live mode (is_simulated=False) Ä‘á»�c tá»�a Ä‘á»™ vÃ  kiá»ƒm tra closed-loop.Fr”   T)Úreturn_valuer–   )g      ^@rk   )Úside_effectz!src.common.is_poe2_window_focusedzsrc.common.send_wasd_directiong      ð?r!   gÍÌÌÌÌÌÜ?)r&   Nr_   r¥   Úokr¦   r§   r6   é   r(   )z\%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.get_player_world_pos
}.call_count
} == %(py7)sr˜   r¨   r©   r}   rb   )z_%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.verify_motion_integrity
}.call_count
} == %(py7)sr   )z%(py1)s == %(py4)s)r=   r/   zassert %(py6)sr0   )r   r   Úensure_focusÚget_player_world_posr�   r   Úsend_wasd_directionrC   rD   rE   rF   rG   rH   rI   rJ   r«   Ú	call_args)rN   r˜   Ú	positionsr²   rX   rO   r¬   rU   rQ   r…   rP   rV   r­   ÚargsÚkwargsrW   Ú@py_format5rR   s                     r   ÚLtest_coordinator_send_wasd_direction_performs_closed_loop_check_in_live_modezvTestCoordinatorMotionIntegrityIntegration.test_coordinator_send_wasd_direction_performs_closed_loop_check_in_live_mode—   sƒ  € å,¸%Ð@Ñ@Ô@ˆÝ&°DÐ9Ñ9Ô9ˆÔà# ^Ð4ˆ	Ý%.¸9Ð%EÑ%EÔ%EˆÔ"Ý(1¸tÐ(DÑ(DÔ(DˆÔ%åÐ6ÀTÐJÑJÔJð 	Dð 	DÝÐ3À$ÐGÑGÔGð	Dð 	Dà×*Ò*¨3°¸dÐ*ÑCÔCˆBð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð Ðˆr�TˆzÐÐÐÕÔÐÐÐÐˆr�TÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ)Ð9Ð)Ô4Ð9¸Ð9Ð4¸Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð4¸Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆuÑ9Ô9Ð9Õ9Ô9ˆuÑ9Ô9Ð9Ð9Õ9Ô9Ð)Ñ9Ô9Õ9Ô9Ð4Ñ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ØÔ,Ð<Ð,Ô7Ð<¸1Ð<Ð7¸1Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð7¸1Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆuÑ<Ô<Ð<Õ<Ô<ˆuÑ<Ô<Ð<Ð<Õ<Ô<Ð,Ñ<Ô<Õ<Ô<Ð7Ñ<Ô<Õ<Ô<¸1Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØÔ4Ô>‰ˆˆfØ�AŒwÐ(˜.Ð(ˆw˜.Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆw˜.Ð(Ñ(Ô(Õ(Ô(ˆwÑ(Ô(Õ(Ô(˜.Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø�AŒwÐ(˜.Ð(ˆw˜.Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆw˜.Ð(Ñ(Ô(Õ(Ô(ˆwÑ(Ô(Õ(Ô(˜.Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(s6   Á%B3Á7BÂB3ÂB 	Â B3Â#B 	Â$B3Â3B7Â:B7N)rŒ   r�   rŽ   r�   r£   r®   r¼   r�   r   r   r’   r’   €   sM   € € € € € ØXÐXðWð Wð Wð
Fð 
Fð 
Fð)ð )ð )ð )ð )r   r’   )r�   Ú
__future__r   ÚbuiltinsrE   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterC   r   r   r   Úunittest.mockr   r   ÚpytestÚ-src.agentic_engine.master_invariants_sentinelr   r   Ú$tools.autonomous_mapping_coordinatorr   Úfixturer   r   r’   r�   r   r   ú<module>rÇ      s>  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €	€	€	€	Ø €€€Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à €€€ðð ð ð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ Mð „ð0ð 0ñ „ð0ð*LUð LUð LUð LUð LUñ LUô LUð LUð^))ð ))ð ))ð ))ð ))ñ ))ô ))ð ))ð ))ð ))r   