
    i'                     R    d Z ddlmZ ddlmZ e G d d             Z G d d      Zy)	u  
Genesis Persistent Context Architecture — MVFL Trigger
Story 3.01 — Track B

Evaluates swarm output against 3 trigger conditions:
1. Syntax/Format — missing required fields, invalid JSON, type mismatches
2. Semantic Inconsistency — internal contradictions in output
3. External Rejection — HTTP 4xx/5xx or api_error present

Priority: External (3) > Semantic (2) > Syntax (1)
    )	dataclass)Optionalc                   @    e Zd ZU dZeed<   ee   ed<   eed<   eed<   y)MVFLTriggerResultz"Result of MVFL trigger evaluation.	triggeredtrigger_typeseveritydetailsN)	__name__
__module____qualname____doc__bool__annotations__r   strint     //mnt/e/genesis-system/core/mvfl/mvfl_trigger.pyr   r      s    ,O3-MLr   r   c                   n    e Zd ZdZdededefdZdedee   fdZdededee   fdZ	dededee   fdZ
y	)
MVFLTriggerz6Evaluates swarm output for 3 error trigger conditions.outputtask_payloadreturnc                     | j                  |      }|r|S | j                  ||      }|r|S | j                  ||      }|r|S t        dddd      S )z
        Evaluate output against all 3 trigger conditions.
        Returns first triggered condition (highest priority first).

        Priority order:
          External rejection (severity 3) > Semantic (severity 2) > Syntax (severity 1)
        FNr   zClean output)_check_external_rejection_check_semantic_inconsistency_check_syntax_errorsr   )selfr   r   extsemsyns         r   evaluatezMVFLTrigger.evaluate$   se     ,,V4J 00FJ ''=J a@@r   c                 6   |j                  d      }|'t        |t              r|dk\  rt        dddd|       S |j                  d	      }|rt        dddd
|       S |j                  d      dk(  r&|j                  d      rt        dddd|d          S y)z5Condition 3: HTTP 4xx/5xx codes or api_error present.status_codeNi  Texternal_rejection   zExternal rejection: HTTP r   r   r	   r
   	api_erroru"   External rejection: API error — statuserrorzExternal rejection: )get
isinstancer   r   )r   r   r%   r)   s       r   r   z%MVFLTrigger._check_external_rejectionA   s     jj/"z+s'CWZHZ$13K=A	  JJ{+	$1<YKH	  ::h7*vzz'/B$1.vg.?@	  r   c           	         g }|j                  d      dk(  r"|j                  d      |j                  d       |j                  d      dk(  r%|j                  d      dk(  r|j                  d       |j                  d      dk(  r"|j                  d      r|j                  d	       |j                  d
      }|0t        |t        t        f      r|dk  r|j                  d| d       |r!t        dddddj                  |             S y)z;Condition 2: Internal contradictions in multi-field output.r*   	completedresultNz"status='completed' but result=None z-status='completed' but result is empty stringr+   z*status='completed' but error field presentduration_msr   znegative duration: msTsemantic   zSemantic inconsistency: ; r(   )r,   appendr-   r   floatr   join)r   r   r   inconsistenciesdurations        r   r   z)MVFLTrigger._check_semantic_inconsistencyf   s     ::h;.6::h3G3O""#GH ::h;.6::h3G23M""#RS ::h;.6::g3F""#OP ::m, 8c5\21""%8
"#EF$'2499_3M2NO	  r   c           	      h   g }|j                  di       }|rt        t        t        t        t
        t        d}|j                         D ]  \  }}t        |t
              s|j                  d      s)||vs||   |j                  d|        G|j                  d      }|s[||v s`t        ||   ||         rst        ||         j                  }	|j                  d| d| d	|	         n d
D ]  }||vs|j                  d|         |r!t        dddddj                  |             S y)z6Condition 1: Missing required fields, type mismatches.expected_schema)r   r   r8   listdictr   requiredNzMissing required field: typezType mismatch for z: expected z, got )task_idr*   zMissing expected field: Tsyntax   zSyntax/format errors: r6   r(   )r,   r   r   r8   r>   r?   r   itemsr-   r7   rA   r   r   r9   )
r   r   r   errorsschematype_mapfield
field_specexpected_typeactual_types
             r   r   z MVFLTrigger._check_syntax_errors   sb    !!"3R8 H &,\\^ !z!*d3>>*-F*fUm.C(@&HI $.NN6$:M$()B)&--9PQ*.ve}*=*F*FK"MM"4UG;}o V((3}!6& / F&MM$<UG"DEF $%061B0CD	  r   N)r   r   r   r   r?   r   r#   r   r   r   r   r   r   r   r   r   !   s    @At A4 A<M A: BS9T J##*.#	#	$#R11*.1	#	$1r   r   N)r   dataclassesr   typingr   r   r   r   r   r   <module>rO      s7   
 "    _ _r   