§
    ˆ=ºjQ  ã                   óT  — U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
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eZeZeeeeeeeeeeeeeegZee         ed<   ededededededededededededed ed!iZeeef         ed"<   e G d#„ d$¦  «        ¦   «         Z G d%„ d&¦  «        Z dS )'uz  
AutoPOE2 - Architectural Invariant Sentinel (Single Source of Truth)
TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 8: Triá»‡t tiÃªu sá»­a lá»—i triá»‡u chá»©ng (Root-Cause-First).
- Rule 11: PhÃ²ng ngá»«a há»“i quy (Automated Regression Prevention).
- Rule 12: RÃ  soÃ¡t toÃ n cá»¥c & Tá»± Ä‘á»‘i khÃ¡ng (Global Invariant Sweep).
- Rule 13: Giao thá»©c Watcher thá»�i gian thá»±c & Tá»± sá»­a lá»—i khÃ©p kÃ­n (6-Stage Closed-Loop).
- Rule 14: Tuyá»‡t Ä‘á»‘i cáº¥m dÃ¹ng mock data / bá»‹a data â€” 100% dá»¯ liá»‡u tháº­t (Real Authentic Data Protocol).

Chá»©a toÃ n bá»™ 14 mÃ£ lá»—i Invariant chuáº©n má»±c:
  - INV-VIT-01..07 (Vitals sinh má»‡nh)
  - INV-XYZ-01..03 (Tá»�a Ä‘á»™ khÃ´ng gian 3D & 2D Planar)
  - INV-OPT-01     (Ä�á»‘i soÃ¡t quang há»�c Optical vs RAM)
  - INV-WDG-01..02 (Watchdog nhá»‹p tim & Core survival)
  - INV-LOG-01     (QuÃ©t ngoáº¡i lá»‡ nghiÃªm trá»�ng trong Core Log)
é    N)Ú	dataclass)ÚAnyÚDictÚListÚOptionalÚTuplez%INV-VIT-01_ERR_BOGUS_VITAL_STRUCT_778z!INV-VIT-02_ERR_ES_OVERFLOW_0x7FFBzINV-VIT-03_ERR_HP_EXCEEDS_MAXzINV-VIT-04_ERR_MANA_EXCEEDS_MAXz$INV-VIT-05_ERR_MANA_BOGUS_STRUCT_779z%INV-VIT-06_ERR_CURRENT_ES_EXCEEDS_MAXz"INV-VIT-07_ERR_PLAYER_DEAD_OR_ZEROz#INV-XYZ-01_ERR_XYZ_FROZEN_AT_ORIGINz INV-XYZ-02_ERR_XYZ_OUT_OF_BOUNDSz#INV-XYZ-03_ERR_XYZ_TELEPORT_ANOMALYz!INV-OPT-01_ERR_OPTICAL_RAM_DESYNCz)INV-WDG-01_ERR_WATCHDOG_HEARTBEAT_TIMEOUTz INV-WDG-02_ERR_CORE_DISCONNECTEDz'INV-LOG-01_ERR_CORE_LOG_FATAL_EXCEPTIONÚALL_INVARIANT_CODESz9INV-VIT-01: Bogus Vital Struct 778/778 (UI Entity Marker)z>INV-VIT-02: Energy Shield Overflow 32763 (0x7FFB Vertex Trash)z%INV-VIT-03: Current HP Exceeds Max HPz)INV-VIT-04: Current Mana Exceeds Max Manaz8INV-VIT-05: Mana Bogus Struct 779/779 (UI Entity Marker)z%INV-VIT-06: Current ES Exceeds Max ESz"INV-VIT-07: Player Dead Or Zero HPz8INV-XYZ-01: Anti-Frozen (0,0,0) On Movement Or In Combatz)INV-XYZ-02: XYZ Out Of Bounds / NaN / Infz+INV-XYZ-03: Abnormal Teleport Distance Jumpz9INV-OPT-01: Optical Screen HP vs RAM HP Desynchronizationz0INV-WDG-01: Watchdog Heartbeat Timeout (>3000ms)z/INV-WDG-02: Core Process Disconnected / Offlinez/INV-LOG-01: Fatal Crash / Exception In Core LogÚINVARIANT_NAMESc                   óF   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dS )ÚInvariantViolationuL   MÃ´ táº£ má»™t vi pháº¡m báº¥t biáº¿n kiáº¿n trÃºc táº¡i thá»�i Ä‘iá»ƒm 0ms.Úinvariant_codeÚinvariant_nameÚseverityÚmessageÚtimestamp_msN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úint© ó    ú=C:\Projects\AutoPOE2\src\agentic_engine\invariant_sentinel.pyr   r   Z   sN   € € € € € € àVÐVØÐÐÑØÐÐÑØ€M€M�MØ€L€L�LØÐÐÑÐÐr   r   c                   ó<  — e Zd ZdZ	 	 	 d9dededefd„Zed	ed
ede	eef         fd„¦   «         Z
ededee         fd„¦   «         Ze	 	 	 	 	 d:dedededededededee	eeef                  dee         fd„¦   «         Ze	 d;dedee         d edee         fd!„¦   «         Ze	 	 	 d<d#ed$ed%ed&ee         dee         f
d'„¦   «         Zed(ee         dee         fd)„¦   «         Zed*eeef         dee         fd+„¦   «         Zd,ede	eee         ef         fd-„Z	 d=d.e	eeef         d/e	eeef         dede	eee         ef         fd0„Z	 	 	 d>d1ed2ed3ed4ee         d5ee         de	eee         ef         fd6„Z	 d?d7ed&ed%ee         de	eee         ef         fd8„ZeZeZdS )@ÚInvariantSentinelu  
    Bá»™ tháº©m tra báº¥t biáº¿n kiáº¿n trÃºc thá»�i gian thá»±c (Rule 12, Rule 13 & Rule 14).
    Hoáº¡t Ä‘á»™ng thuáº§n tÃºy trÃªn dá»¯ liá»‡u thá»±c Ä‘á»‹a, khÃ´ng dÃ¹ng sá»‘ liá»‡u bá»‹a Ä‘áº·t.
    LÃ  Single Source of Truth duy nháº¥t cho toÃ n bá»™ há»‡ thá»‘ng AutoPOE2.
    çš™™™™™é?ç      Ð?é¸  Úmin_planar_deltaÚoptical_divergence_thresholdÚwatchdog_timeout_msc                 ó0   — || _         || _        || _        d S ©N)r!   r"   r#   )Úselfr!   r"   r#   s       r   Ú__init__zInvariantSentinel.__init__n   s"   € ð !1ˆÔØ,HˆÔ)Ø#6ˆÔ Ð Ð r   Úraw_curÚraw_maxÚreturnc                 óX  — d}d}t          | t          ¦  «        r¢d| v rž|                      d¦  «        }d                     d„ |d         D ¦   «         ¦  «        }d                     d„ |d                              ¦   «         d         D ¦   «         ¦  «        }|rt	          |¦  «        nd}|rt	          |¦  «        nd}nst          | t          t
          f¦  «        rt	          | ¦  «        }nGt          | t          ¦  «        r2d                     d„ | D ¦   «         ¦  «        }|rt	          |¦  «        nd}|dk    rst          |t          t
          f¦  «        rt	          |¦  «        }nGt          |t          ¦  «        r2d                     d„ |D ¦   «         ¦  «        }|rt	          |¦  «        nd}||fS )	u†   TrÃ­ch xuáº¥t cáº·p giÃ¡ trá»‹ (current, max) an toÃ n tá»« cáº£ sá»‘ nguyÃªn láº«n chuá»—i Ä‘á»‹nh dáº¡ng (vÃ­ dá»¥ 'HP: 157 / 157').r   ú/Ú c              3   óB   K  — | ]}|                      ¦   «         ¯|V — Œd S r%   ©Úisdigit©Ú.0Úcs     r   ú	<genexpr>z6InvariantSentinel._parse_vital_pair.<locals>.<genexpr>   s/   è è € Ð DÐ D q¸¿	º	¹¼Ð D Ð DÐ DÐ DÐ DÐ DÐ Dr   c              3   óB   K  — | ]}|                      ¦   «         ¯|V — Œd S r%   r/   r1   s     r   r4   z6InvariantSentinel._parse_vital_pair.<locals>.<genexpr>€   s/   è è € Ð OÐ O qÀ1Ç9Â9Á;Ä;Ð O Ð OÐ OÐ OÐ OÐ OÐ Or   é   c              3   óB   K  — | ]}|                      ¦   «         ¯|V — Œd S r%   r/   r1   s     r   r4   z6InvariantSentinel._parse_vital_pair.<locals>.<genexpr>‡   ó/   è è € Ð CÐ C q°q·y²y±{´{Ð C Ð CÐ CÐ CÐ CÐ CÐ Cr   c              3   óB   K  — | ]}|                      ¦   «         ¯|V — Œd S r%   r/   r1   s     r   r4   z6InvariantSentinel._parse_vital_pair.<locals>.<genexpr>Ž   r8   r   )Ú
isinstancer   ÚsplitÚjoinr   Úfloat)r(   r)   ÚcurÚmax_valÚpartsÚ
cur_digitsÚ
max_digitsÚdigitss           r   Ú_parse_vital_pairz#InvariantSentinel._parse_vital_pairx   sŸ  € ð ˆØˆÝ�g�sÑ#Ô#ð 	3¨¨w¨¨Ø—M’M #Ñ&Ô&ˆEØŸšÐ DÐ D¨E°!¬HÐ DÑ DÔ DÑDÔDˆJØŸšÐ OÐ O¨E°!¬H¯NªNÑ,<Ô,<¸QÔ,?Ð OÑ OÔ OÑOÔOˆJØ%/Ð6•#�j‘/”/�/°QˆCØ)3Ð:•c˜*‘o”o�o¸ˆGˆGå˜'¥C­ <Ñ0Ô0ð 3Ý˜'‘l”l��Ý˜G¥SÑ)Ô)ð 3ØŸšÐ CÐ C¨GÐ CÑ CÔ CÑCÔC�Ø%+Ð2•c˜&‘k”k�k°�à�aŠ<ˆ<Ý˜'¥C­ <Ñ0Ô0ð 7Ý˜g™,œ,��Ý˜G¥SÑ)Ô)ð 7ØŸšÐ CÐ C¨GÐ CÑ CÔ CÑCÔC�Ø)/Ð6�#˜f™+œ+˜+°Q�à�Gˆ|Ðr   Úplayer_datac                 óÚ  — g }t          | t          ¦  «        r|                      d| ¦  «        }n#t          | d¦  «        rt	          | d¦  «        }n| }t          |t          ¦  «        �rt
                               |                     d|                     dd¦  «        ¦  «        |                     dd¦  «        ¦  «        \  }}t
                               |                     d|                     dd¦  «        ¦  «        |                     dd¦  «        ¦  «        \  }}t
                               |                     d	|                     d
d¦  «        ¦  «        |                     dd¦  «        ¦  «        \  }}nát
                               t	          |dt	          |dd¦  «        ¦  «        t	          |dd¦  «        ¦  «        \  }}t
                               t	          |dt	          |dd¦  «        ¦  «        t	          |dd¦  «        ¦  «        \  }}t
                               t	          |d	t	          |d
d¦  «        ¦  «        t	          |dd¦  «        ¦  «        \  }}|dk    r |dk    r|                     t          ¦  «         |dk    r |dk    r|                     t          ¦  «         |dk    s|dk    r|                     t          ¦  «         |dk    r)||k    r#t          |vr|                     t          ¦  «         |dk    r ||k    r|                     t          ¦  «         |dk    r ||k    r|                     t          ¦  «         |dk    r |dk    r|                     t          ¦  «         |S )u  
        Kiá»ƒm tra báº¥t biáº¿n sinh tá»“n Vitals (INV-VIT-01..07):
        - Báº¯t lá»—i HP == 778 && max_hp == 778 (bogus entity struct / UI marker).
        - Báº¯t lá»—i ES > 20000 hoáº·c ES == 32763 (0x7FFB graphic vertex trash).
        - Báº¯t lá»—i current_hp > max_hp.
        - Báº¯t lá»—i current_mana > max_mana.
        - Báº¯t lá»—i Mana == 779 && max_mana == 779 (UI marker).
        - Báº¯t lá»—i current_es > max_es (khi max_es > 0).
        - Báº¯t lá»—i HP <= 0 khi max_hp > 0 (player dead or zero).
        ÚplayerÚ
current_hpÚhpr   Úmax_hpÚ
current_esÚesÚmax_esÚcurrent_manaÚmanaÚmax_manai
  i  i N  iû  )r:   ÚdictÚgetÚhasattrÚgetattrr   rD   ÚappendÚERR_BOGUS_VITAL_STRUCT_778ÚERR_MANA_BOGUS_STRUCT_779ÚERR_ES_OVERFLOW_0x7FFBÚERR_CURRENT_ES_EXCEEDS_MAXÚERR_HP_EXCEEDS_MAXÚERR_MANA_EXCEEDS_MAXÚERR_PLAYER_DEAD_OR_ZERO)	rE   Ú	anomaliesÚpÚcur_hprJ   Úcur_esrM   Úcur_manarP   s	            r   Úcheck_vitals_invariantsz)InvariantSentinel.check_vitals_invariants“   sC  € ð  "ˆ	å�k¥4Ñ(Ô(ð 	Ø—’ ¨+Ñ6Ô6ˆAˆAÝ�[ (Ñ+Ô+ð 	Ý˜ XÑ.Ô.ˆAˆAàˆAå�a�ÑÔñ 	Ý.×@Ò@Ø—’�l A§E¢E¨$°¡N¤NÑ3Ô3Ø—’�h Ñ"Ô"ñô ‰NˆF�Fõ /×@Ò@Ø—’�l A§E¢E¨$°¡N¤NÑ3Ô3Ø—’�h Ñ"Ô"ñô ‰NˆF�Fõ "3×!DÒ!DØ—’�n a§e¢e¨F°AÑ&6Ô&6Ñ7Ô7Ø—’�j !Ñ$Ô$ñ"ô "ÑˆH�h�hõ
 /×@Ò@Ý˜˜<­°°D¸!Ñ)<Ô)<Ñ=Ô=Ý˜˜8 QÑ'Ô'ñô ‰NˆF�Fõ /×@Ò@Ý˜˜<­°°D¸!Ñ)<Ô)<Ñ=Ô=Ý˜˜8 QÑ'Ô'ñô ‰NˆF�Fõ "3×!DÒ!DÝ˜˜>­7°1°f¸aÑ+@Ô+@ÑAÔAÝ˜˜: qÑ)Ô)ñ"ô "ÑˆH�hð �SŠ=ˆ=˜V sš]˜]Ø×ÒÕ7Ñ8Ô8Ð8ð �sŠ?ˆ?˜x¨3š˜Ø×ÒÕ6Ñ7Ô7Ð7ð �EŠ>ˆ>˜V uš_˜_Ø×ÒÕ3Ñ4Ô4Ð4ð �AŠ:ˆ:˜& 6š/˜/Ý%¨YÐ6Ð6Ø× Ò Õ!;Ñ<Ô<Ð<ð �AŠ:ˆ:˜& 6š/˜/Ø×ÒÕ/Ñ0Ô0Ð0ð �aŠ<ˆ<˜H xÒ/Ð/Ø×ÒÕ1Ñ2Ô2Ð2ð �AŠ:ˆ:˜& Aš+˜+Ø×ÒÕ4Ñ5Ô5Ð5àÐr   r-   r   Fç        NÚpos_xÚpos_yÚpos_zÚ	area_nameÚmonsters_countÚ	is_movingÚstationary_duration_secÚlast_posc                 óP  — g }t          j        | ¦  «        r(t          j        |¦  «        rt          j        |¦  «        s|                     t          ¦  «         |S t	          | ¦  «        dk    s&t	          |¦  «        dk    st	          |¦  «        dk    r|                     t          ¦  «         t	          | ¦  «        dk     o%t	          |¦  «        dk     ot	          |¦  «        dk     }	t          |o|dk    od|                     ¦   «         v¦  «        }
|	rE|dk    r|                     t          ¦  «         n$|s|
r |dk    r|                     t          ¦  «         |�K|\  }}}t          j        | |z
  d	z  ||z
  d	z  z   ¦  «        }|d
k    r|	s|                     t          ¦  «         |S )um  
        Kiá»ƒm tra báº¥t biáº¿n tá»�a Ä‘á»™ XYZ (INV-XYZ-01..03):
        - Báº¯t lá»—i XYZ Ä‘á»©ng yÃªn (0.0, 0.0, 0.0) khi Ä‘ang á»Ÿ trong zone cÃ³ quÃ¡i váº­t hoáº·c di chuyá»ƒn > 3s.
        - Kiá»ƒm tra NaN / Inf.
        - Kiá»ƒm tra biÃªn báº£n Ä‘á»“ POE2 (abs > 50000).
        - Kiá»ƒm tra váº­n tá»‘c dá»‹ch chuyá»ƒn phi lÃ½ (> 2000 units/tick).
        g     jè@g     ˆÃ@çü©ñÒMbP?z--Útownr   g      @Né   g     @Ÿ@)
ÚmathÚisfiniterU   ÚERR_XYZ_OUT_OF_BOUNDSÚabsÚboolÚlowerÚERR_XYZ_FROZEN_AT_ORIGINÚsqrtÚERR_XYZ_TELEPORT_ANOMALY)rd   re   rf   rg   rh   ri   rj   rk   r]   Úis_at_originÚis_active_combat_areaÚlxÚlyÚ_Údists                  r   Úcheck_xyz_invariantsz&InvariantSentinel.check_xyz_invariantsâ   sÂ  € ð$  "ˆ	õ ”˜eÑ$Ô$ð 	­¬°uÑ)=Ô)=ð 	Å$Ä-ÐPUÑBVÔBVð 	Ø×ÒÕ2Ñ3Ô3Ð3ØÐõ ˆu‰:Œ:˜ÒÐ¥3 u¡:¤:°Ò#7Ð#7½3¸u¹:¼:ÈÒ;OÐ;OØ×ÒÕ2Ñ3Ô3Ð3õ ˜5‘z”z EÒ)ÐW­c°%©j¬j¸5Ò.@ÐWÅSÈÁZÄZÐRWÒEWˆÝ $ YÐ%h°9ÀÒ3DÐ%hÈÐW`×WfÒWfÑWhÔWhÐIhÑ iÔ iÐàð 	;Ø Ò!Ð!Ø× Ò Õ!9Ñ:Ô:Ð:Ð:Øð ;Ð4ð ;Ð:QÐUXÒ:XÐ:XØ× Ò Õ!9Ñ:Ô:Ð:ð ÐØ ‰IˆB��AÝ”9˜e b™j¨QÑ.°%¸"±*ÀÑ1BÑBÑCÔCˆDØ�fŠ}ˆ} \ˆ}Ø× Ò Õ!9Ñ:Ô:Ð:àÐr   ç      9@Ú
ram_hp_pctÚoptical_hp_pctÚthreshold_pctc                 ó–   — |€g S | dk    r|dk    r| dz  n| }|dk    r|dk    r|dz  n|}t          ||z
  ¦  «        |k    rt          gS g S )uÄ   Báº¯t lá»—i chÃªnh lá»‡ch giá»¯a Screen HP (tá»« Optical sensor) vÃ  RAM HP (INV-OPT-01).
        Tá»± Ä‘á»™ng chuáº©n hÃ³a cáº£ thang tá»· lá»‡ [0.0 - 1.0] láº«n pháº§n trÄƒm [0 - 100%].
        Nç      ð?g      Y@)rs   ÚERR_OPTICAL_RAM_DESYNC)r�   r‚   rƒ   Úr_valÚo_vals        r   Úcheck_optical_crosscheckz*InvariantSentinel.check_optical_crosscheck  s}   € ð Ð!ØˆIà'1°SÒ'8Ð'8¸]ÈSÒ=PÐ=P�
˜UÑ"Ð"ÐWaˆØ+9¸SÒ+@Ð+@À]ÐUXÒEXÐEX� Ñ&Ð&Ð_mˆÝˆu�u‰}ÑÔ Ò-Ð-Ý*Ð+Ð+Øˆ	r   TÚlast_heartbeat_msÚcore_is_onlineÚ
timeout_msÚnow_msc                 óÞ   — g }|s|                      t          ¦  «         |€#t          t          j        ¦   «         dz  ¦  «        }| dk    r#|| z
  |k    r|                      t          ¦  «         |S )uO   Báº¯t Core bá»‹ timeout hoáº·c ngáº¯t káº¿t ná»‘i báº¥t ngá»� (INV-WDG-01..02).Niè  r   )rU   ÚERR_CORE_DISCONNECTEDr   ÚtimeÚERR_WATCHDOG_HEARTBEAT_TIMEOUT)rŠ   r‹   rŒ   r�   r]   s        r   Úcheck_watchdog_invariantsz+InvariantSentinel.check_watchdog_invariants$  sy   € ð  "ˆ	Øð 	4Ø×ÒÕ2Ñ3Ô3Ð3àˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFà˜qÒ Ð  fÐ/@Ñ&@À:Ò&MÐ&MØ×ÒÕ;Ñ<Ô<Ð<àÐr   Ú	log_linesc                 óp   — g }g d¢}| D ],}|D ]'}||v r!|                      t          › d|› �¦  «          nŒ(Œ-|S )uj   Báº¯t cÃ¡c dÃ²ng [FATAL], [EXCEPTION], Access Violation, c0000005, Unhandled Exception, v.v. (INV-LOG-01).)
z[FATAL]z[EXCEPTION]zAccess ViolationÚ
0xC0000005Úc0000005zUnhandled Exceptionzstd::bad_allocÚ
CRASH_DUMPzAssertion failedzCrash detectedú:)rU   ÚERR_CORE_LOG_FATAL_EXCEPTION)r“   r]   Úfatal_keywordsÚlineÚkws        r   Úcheck_log_errorsz"InvariantSentinel.check_log_errors8  sy   € ð  "ˆ	ð
ð 
ð 
ˆð ð 	ð 	ˆDØ$ð ð �Ø˜�:�:Ø×$Ò$Õ(DÐ%KÐ%KÀrÐ%KÐ%KÑLÔLÐLØ�Eð øð Ðr   Údatac                 óŒ  — g }|                      t                               | ¦  «        ¦  «         t          | t          ¦  «        r|                      d| ¦  «        nt          | d| ¦  «        }t          |t          ¦  «        r¬t          |                     d|                      dd¦  «        ¦  «        pd¦  «        }t          |                     d|                      dd¦  «        ¦  «        pd¦  «        }t          |                     d|                      dd¦  «        ¦  «        pd¦  «        }n�t          t          |dt          | dd¦  «        ¦  «        pd¦  «        }t          t          |dt          | dd¦  «        ¦  «        pd¦  «        }t          t          |dt          | dd¦  «        ¦  «        pd¦  «        }|                      t                               |||t          |                      d|                      dd¦  «        ¦  «        ¦  «        t          |                      d	d
¦  «        pd
¦  «        ¬¦  «        ¦  «         |S )u=   Kiá»ƒm tra toÃ n bá»™ báº¥t biáº¿n tá»« dictionary telemetry.rG   rd   rc   re   rf   rg   Úarear-   rh   r   )rd   re   rf   rg   rh   )Úextendr   rb   r:   rQ   rR   rT   r=   r   r   r   )rž   r]   r^   ÚpxÚpyÚpzs         r   Ú	check_allzInvariantSentinel.check_allO  s  € ð ˆ	Ø×ÒÕ*×BÒBÀ4ÑHÔHÑIÔIÐIÝ(2°4½Ñ(>Ô(>ÐaˆD�HŠH�X˜tÑ$Ô$Ð$ÅGÈDÐRZÐ\`ÑDaÔDaˆÝ�a�ÑÔð 	PÝ�q—u’u˜W d§h¢h¨w¸Ñ&<Ô&<Ñ=Ô=ÐDÀÑEÔEˆBÝ�q—u’u˜W d§h¢h¨w¸Ñ&<Ô&<Ñ=Ô=ÐDÀÑEÔEˆBÝ�q—u’u˜W d§h¢h¨w¸Ñ&<Ô&<Ñ=Ô=ÐDÀÑEÔEˆBˆBå•w˜q '­7°4¸À#Ñ+FÔ+FÑGÔGÐNÈ3ÑOÔOˆBÝ•w˜q '­7°4¸À#Ñ+FÔ+FÑGÔGÐNÈ3ÑOÔOˆBÝ•w˜q '­7°4¸À#Ñ+FÔ+FÑGÔGÐNÈ3ÑOÔOˆBà×ÒÕ*×?Ò?ØØØÝ˜$Ÿ(š( ;°·²¸ÀÑ0DÔ0DÑEÔEÑFÔFÝ˜tŸxšxÐ(8¸!Ñ<Ô<ÐAÀÑBÔBð @ñ 
ô 
ñ 	ô 	ð 	ð Ðr   Úsnapshot_or_datac           
      ó¼   — |                       |¦  «        }|rD|d         }t                               ||¦  «        }d|d|› d|› dd                     |¦  «        › �fS dS )u�   
        Kiá»ƒm tra tÃ­nh toÃ n váº¹n cá»§a Vitals theo INV-VIT-01..07.
        Tráº£ vá»� (is_valid, error_code_if_any, description).
        r   Fu0   PhÃ¡t hiá»‡n vi pháº¡m báº¥t biáº¿n sinh tá»“n (z) - z: z, )TNu6   Vitals thá»�a mÃ£n toÃ n bá»™ Architectural Invariants)rb   r
   rR   r<   )r&   r¦   r]   Ú	first_errÚnames        r   Úevaluate_vitalsz!InvariantSentinel.evaluate_vitalsj  sƒ   € ð
 ×0Ò0Ð1AÑBÔBˆ	Øð 	Ø! !œˆIÝ"×&Ò& y°)Ñ<Ô<ˆDàØØpÀ9ÐpÐpÐRVÐpÐpÐZ^×ZcÒZcÐdmÑZnÔZnÐpÐpðð ð
 VÐUr   Úprev_xyzÚcurr_xyzc                 óÔ  — |\  }}}|\  }}}	|rCt          |¦  «        dk     r0t          |¦  «        dk     rt          |¦  «        dk     r
dt          dfS |sdS ||z
  }
||z
  }||	z
  }t          j        |
|
z  ||z  z   ¦  «        }t          j        |
|
z  ||z  z   ||z  z   ¦  «        }|| j        k    rddd|d›d	|d›d
�fS || j        k    r
ddd|d›d
�fS dt          d|d›d| j        › d�fS )uÿ   
        Kiá»ƒm chá»©ng tÃ­nh há»£p lá»‡ cá»§a Vector3 Position theo INV-XYZ-01..03.
        Há»— trá»£ nháº­n diá»‡n chuyá»ƒn Ä‘á»™ng máº·t pháº³ng 2D (Z=const, delta_x/delta_y > 0)
        trÃªn Ä‘áº§m láº§y Sandswept Marsh hoáº·c sÃ n pháº³ng.
        rm   Fuc   NhÃ¢n váº­t Ä‘ang di chuyá»ƒn nhÆ°ng tá»�a Ä‘á»™ káº¹t táº¡i (0.0, 0.0, 0.0) - Vi pháº¡m INV-XYZ-01)TNu#   NhÃ¢n váº­t Ä‘á»©ng yÃªn há»£p lá»‡TNu;   Chuyá»ƒn Ä‘á»™ng máº·t pháº³ng 2D há»£p lá»‡ (planar_delta=ú.2fz, dz=ú)u8   Chuyá»ƒn Ä‘á»™ng Ä‘á»‹a hÃ¬nh dá»‘c há»£p lá»‡ (dist_3d=u<   NhÃ¢n váº­t di chuyá»ƒn nhÆ°ng XYZ Ä‘á»©ng im (planar_delta=z < u   ) - Vi pháº¡m INV-XYZ-01)rs   rv   rp   rw   r!   )r&   r«   r¬   ri   ÚxÚyÚzr¢   r£   r¤   ÚdxÚdyÚdzÚplanar_distÚdist_3ds                  r   Úverify_xyz_movementz%InvariantSentinel.verify_xyz_movementz  s€  € ð ‰ˆˆ1ˆaØ‰
ˆˆB�ð ð 	�˜Q™œ %š˜­C°©F¬F°UªN¨N½sÀ1¹v¼vÈº~¸~àÝ(Øuðð ð ð 	GØFÐFà�‰VˆØ�‰VˆØ�‰VˆÝ”i  R¡¨"¨r©'Ñ 1Ñ2Ô2ˆÝ”)˜B ™G b¨2¡gÑ-°°R±Ñ7Ñ8Ô8ˆð ˜$Ô/Ò/Ð/àØØmÈkÐmÐmÐmÐdfÐmÐmÐmÐmðð ð �dÔ+Ò+Ð+àØØYÈ7ÐYÐYÐYÐYðð ð Ý$ð OÈ;ð  Oð  Oð  OÐ_cÔ_tð  Oð  Oð  Oð
ð 	
r   Ú
optical_hpÚram_hprJ   Úoptical_ratioÚ	ram_ratioc                 óL  — |dk    r+t          t          |¦  «        t          |¦  «        d¦  «        }|�|n||z  }|�|n||z  }t          ||z
  ¦  «        }|| j        k    r,dt          d|› d|d›d|› d|d›d	|d
z  d›d| j        d
z  d›d�fS ddd|d
z  d›d| j        d
z  d›d�fS )uê   
        Kiá»ƒm tra Ä‘á»™ Ä‘á»“ng nháº¥t giá»¯a cáº£m biáº¿n quang há»�c Quáº£ Cáº§u MÃ¡u vÃ  RAM theo INV-OPT-01.
        PhÃ¡t hiá»‡n stale pointer RAM khi chÃªnh lá»‡ch vÆ°á»£t quÃ¡ ngÆ°á»¡ng cho phÃ©p (máº·c Ä‘á»‹nh 25%).
        rc   r…   NFu   Lá»‡ch pha Optical (z HP, ratio=r®   z
) vs RAM (u   ): Ä‘á»™ lá»‡ch éd   z.1fu   % > ngÆ°á»¡ng u   % - Vi pháº¡m INV-OPT-01Tu+   Optical vÃ  RAM Ä‘á»“ng bá»™ (Ä‘á»™ lá»‡ch z% <= z%))Úmaxr=   rs   r"   r†   )	r&   r¹   rº   rJ   r»   r¼   Úopt_rÚram_rÚ
divergences	            r   Úevaluate_optical_vs_ramz)InvariantSentinel.evaluate_optical_vs_ram°  sg  € ð �SŠ=ˆ=Ý�˜zÑ*Ô*­E°&©M¬M¸3Ñ?Ô?ˆFà!.Ð!:��ÀÈfÑATˆØ&Ð2�	�	¸À&¹ˆå˜ ™Ñ'Ô'ˆ
Ø˜Ô9Ò9Ð9àÝ&ðJ zð Jð J¸eÐtð Jð JÐSYð Jð JÐfkÐtð Jð JØ *¨SÑ 0ð  JðJð JØDHÔDeÐhkÑDkð  JðJð Jð Jðð ð �dð  UÈ*ÐWZÑJZð  Uð  Uð  UÐeiô  fGð  JMñ  fMð  Uð  Uð  Uð  Uð  Vð  	Vr   Úheartbeat_timestamp_msc                 ób   — |�|n| j         }||z
  }||k    rdt          d|› d|› d�fS ddd|› d�fS )	u¨   
        Kiá»ƒm tra nhá»‹p tim Watchdog theo INV-WDG-01.
        Khi máº¥t nhá»‹p tim (>3000ms), kÃ­ch hoáº¡t Co-Pilot Passive Mode, cáº¥m há»§y tiáº¿n trÃ¬nh.
        NFu   Máº¥t nhá»‹p tim Watchdog (zms > u@   ms) -> Háº¡ cáº¥p Co-Pilot Passive, báº£o vá»‡ Core Ä‘á»™c láº­pTu'   Watchdog nhá»‹p tim khá»�e máº¡nh (age=zms))r#   r‘   )r&   rÄ   r�   rŒ   Úeffective_timeoutÚage_mss         r   Úevaluate_watchdogz#InvariantSentinel.evaluate_watchdogÍ  s�   € ð +5Ð*@˜J˜JÀdÔF^ÐØÐ0Ñ0ˆØÐ%Ò%Ð%àÝ.ð O¨fð  Oð  OÐ;Lð  Oð  Oð  Oðð ð �dÐQÀfÐQÐQÐQÐRÐRr   )r   r   r    )r-   r   Frc   N)r€   )Tr    N)T)rc   NNr%   )r   r   r   r   r=   r   r'   Ústaticmethodr   r   rD   r   r   rb   rt   r   r   r‰   r’   r�   r   r¥   rª   r¸   rÃ   rÈ   Úevaluate_xyzÚevaluate_log_slicer   r   r   r   r   g   s4  € € € € € ðð ð #&Ø.2Ø#'ð	7ð 7àð7ð ',ð7ð !ð	7ð 7ð 7ð 7ð ð 3ð °ð ¸¸sÀC¸x¼ð ð ð ñ „\ðð4 ðL¨Sð L°T¸#´Yð Lð Lð Lñ „\ðLð\ ð
 ØØØ),Ø9=ð-ð -Øð-àð-ð ð-ð ð	-ð
 ð-ð ð-ð "'ð-ð ˜5 ¨¨uÐ!4Ô5Ô6ð-ð 
ˆcŒð-ð -ð -ñ „\ð-ð^ ð  $ðð Øðà  œðð ðð 
ˆcŒð	ð ð ñ „\ðð" ð  $ØØ $ð	ð Øðàðð ðð ˜”ð	ð
 
ˆcŒðð ð ñ „\ðð& ð D¨¤Ið °$°s´)ð ð ð ñ „\ðð, ð˜˜S #˜Xœð ¨4°¬9ð ð ð ñ „\ðð4V°ð V¸¸dÀHÈSÄMÐSVÐ>VÔ8Wð Vð Vð Vð Vð( ð	4
ð 4
à˜˜u eÐ+Ô,ð4
ð ˜˜u eÐ+Ô,ð4
ð ð	4
ð
 
ˆt�X˜c”] CÐ'Ô	(ð4
ð 4
ð 4
ð 4
ðt Ø)-Ø%)ðVð VàðVð ðVð ð	Vð
   ”ðVð ˜E”?ðVð 
ˆt�X˜c”] CÐ'Ô	(ðVð Vð Vð VðB %)ð	Sð Sà #ðSð ðSð ˜S”Mð	Sð
 
ˆt�X˜c”] CÐ'Ô	(ðSð Sð Sð Sð, (€LØ)ÐÐÐr   r   )!r   rp   r�   Údataclassesr   Útypingr   r   r   r   r   rV   rX   rZ   r[   rW   rY   r\   rv   rr   rx   r†   r‘   r�   r™   ÚERR_XYZ_FROZENÚERR_WATCHDOG_HEARTBEAT_LOSTr	   r   r   r
   r   r   r   r   r   ú<module>rÐ      s  ððð ð ð" €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð EÐ Ø<Ð Ø4Ð Ø8Ð ØBÐ ØDÐ Ø>Ð ð AÐ Ø:Ð Ø@Ð ð =Ð ð "MÐ Ø:Ð ð  IÐ ð *€Ø<Ð ð ØØØØØØØØØØØ"ØØ ð"Ð �T˜#”Yð ð ñ ð$ Ð [ØÐ\ØÐ?ØÐEØÐYØÐ GØÐAØÐXØÐFØÐKØÐWØ"Ð$VØÐLØ Ð"Sð#€��c˜3�h”ð ð ñ ð$ ðð ð ð ð ñ ô ñ „ðð}*ð }*ð }*ð }*ð }*ñ }*ô }*ð }*ð }*ð }*r   