
    =iH                         U d Z ddlmZmZ ddlmZmZmZ e G d d             Zddddddd	Z	ee
ee
ef   f   ed
<   e
eeefeeedZ G d d      Zy)u   
Genesis Persistent Context Architecture — Output Validator
Story 3.03 — Track B

Typed schema validator for swarm output.
Catches missing fields, wrong types, empty required strings.
Collects ALL errors (not fail-fast).
    )	dataclassfield)DictAnyListc                   >    e Zd ZU dZeed<    ee      Ze	e
   ed<   y)ValidationResultzResult of output validation.valid)default_factoryerrorsN)__name__
__module____qualname____doc__bool__annotations__r   listr   r   str     3/mnt/e/genesis-system/core/mvfl/output_validator.pyr	   r	      s    &Kd3FDI3r   r	   r   T)typerequired)task_idstatusDEFAULT_SWARM_OUTPUT_SCHEMA)r   intfloatr   dictr   c                   &    e Zd ZdZddededefdZy)OutputValidatorz-Validates swarm output against typed schemas.Noutputschemareturnc           	      Z   |t         }g }|j                         D ]  \  }}|j                  dd      }|j                  d      }|j                  |      }|r||vs||j                  d| d       X||vr]|r>|dk(  r9t	        |t
              r)|j                         dk(  r|j                  d| d       |s|t        j                  |      }	|	st	        ||	      rt        |      j                  }
|j                  d	| d
| d|
         t        t        |      dk(  |      S )a  
        Validate output dict against schema.

        Args:
            output: The swarm output to validate
            schema: Schema dict. Format: {"field": {"type": "str|int|float|list|dict|bool", "required": True/False}}
                    Defaults to DEFAULT_SWARM_OUTPUT_SCHEMA if not provided.

        Returns:
            ValidationResult with valid=True/False and list of all errors
        r   Fr   zMissing required field: ''r    z"Empty string for required field: 'zType mismatch for 'z': expected z, got r   )r
   r   )r   itemsgetappend
isinstancer   strip	_TYPE_MAPr   r   r	   len)selfr"   r#   r   
field_name
field_specr   expected_typevalueexpected_python_typeactuals              r   validatezOutputValidator.validate(   sG    >0F&,lln 	"J
!~~j%8H&NN62MJJz*E Zv5 9*QGH ' MU2z%7MRWR]R]R_ceRe B:,aPQ !2'0}}]'C$'
5BV0W!%[11FMM-j\m_TZ[aZbc3	:  f+"
 	
r   )N)r   r   r   r   r   r	   r6   r   r   r   r!   r!   %   s     71
t 1
T 1
=M 1
r   r!   N)r   dataclassesr   r   typingr   r   r   r	   r   r   r   r   r   r   r   r   r-   r!   r   r   r   <module>r9      s    ) " " 4 4 4 40$/: T#tCH~"56  5\	4
 4
r   