
    3Yj                         d dl Z d dlZd dlZd dlZd dlmZ dZdZdZg dZ	d Z
d Zd	 Zed
k    rD eej                  dk    r edg            eej        d         ej        d                    dS dS )    N)Pathgacmai_20260717_104203i6  i:  )u*   câu chuyện (?:kết thúc|dừng lại)u   hết phần \d+u   phần tiếp theou   không còn phần sauc                 \    t          t          j        d| t          j                            S )Nz\b\w+\b)lenrefindallUNICODE)texts    c/data/video-pipeline/GacMaiAudio/project/gacmai_20260717_104203/artifacts/scripts/validate_story.pywordsr      s     rz*dBJ77888    c                 n    t          t          j        d| ddd                     t          d          )Nfailed)statuserrorsF   )ensure_asciiindent   )printjsondumps
SystemExit)r   s    r   failr      s6    	$*x88uUV
W
W
WXXX
Q--r   c           	      	   t          |           t          |          }}t          j        |                                          t          j        |                                          }}g }|                    d          t
          k    r|                    d           |                    d          |                    d          k    r|                    d           t          j        |	                                          
                                }|                    d          |k    r|                    d           |                    d          }t          |t                    r+d |D             t          t          d	d
                    k    r|                    d           g }g }	|D ]}
|
                    d          }t          |t                    r,t          |          dk    st          d |D                       r-|                    d|
                    d           d           |	                    |           d                    |	          }t%          |          }t&          |cxk    rt(          k    s*n |                    d| dt&           dt(                      |                    dg           }|D ]}||vr|                    d|            |                    d          |k    r|                    d           |D ]u}|                                d         }|                    |d          }t/          j        dt/          j        |           d|          r|                    d|            vt4          D ]:}t/          j        ||t.          j                  r|                    d|            ;|                    d           d! t          d	d"          D             k    r|                    d#           |                    d$          d%k    r|                    d&           |                    d'd(          s|                    d)           |rt9          |           d*t          j        |	                                          
                                |dt          |	          |||d          d+}t;          t          j        |d(,                     d S )-N
project_idzproject identity mismatchtitleztitle mismatchoutline_sha256zoutline checksum mismatchpartsc                 8    g | ]}|                     d           S )part)get).0ps     r   
<listcomp>zmain.<locals>.<listcomp>"   s"    %C%C%CaeeFmm%C%C%Cr   r      zparts must be exactly 1-12
paragraphs   c              3   l   K   | ]/}t          |t                     p|                                 V  0d S )N)
isinstancestrstrip)r#   xs     r   	<genexpr>zmain.<locals>.<genexpr>(   sF      >u>ujk:aPSCTCT?T?e\]\c\c\e\eXe>u>u>u>u>u>ur   zpart r!   z+ must contain 12 nonempty paragraph stringsz

zword count z	 outside -castzcast missing from narration: named_charactersz8named_characters must exactly equal locked cast in orderr    z(?<!\w)z(?!\w)zbare surname detected: zmeta prose detected: evidence_idsc                     g | ]}d |d	S )E02d )r#   is     r   r%   zmain.<locals>.<listcomp><   s     $F$F$FQ[[[[$F$F$Fr   
   zevidence_ids must be E01-E09povlimited_to_female_protagonistzPOV mismatchclosed_endingFzclosed_ending must be truepassed)r   story_sha256r   r   r'   r   r0   r3   )r   )r   r   loads	read_textr"   
PROJECT_IDappendhashlibsha256
read_bytes	hexdigestr*   listranger   anyextendjoinr   WORD_MINWORD_MAXsplitreplacer   searchescapeMETA_PATTERNSIr   r   r   )
story_pathoutline_pathspopstoryoutliner   expected_outline_shar   	narrationr$   parasr
   countr0   namesurnamescrubpatouts                       r   mainrc      s   *tL11BZ//BLLNN1K1K7EFyy*,,fmm<W.X.X.XyyW[[11116==AQ3R3R3R 88BBDDyy!""&:::FMMJe<f<f<f
))G

EeD!! %C%CU%C%C%CtERSTVKKGXGX%X%X2333I    eeL!!%%% 	UR3>u>uot>u>u>u;u;uMM\!%%--\\\]]]	Y		D
++Eu((((((((&--8ke8k8kV^8k8kai8k8k*l*l*l	VB		D S StV]]+Q4+Q+QRRRyy#$$,,fmm<v.w.w.w ? ?

Qll4$$9:	' 2 2:::EBB 	?MM=G==>>> R R9Sbd##QV]]3P33P3P%Q%Q%Qyy  $F$F%"++$F$F$FFFVtHuHuHuyy:::FMM.<Y<Y<Y99_U++XV]];W-X-X-XtF|||'.*I*I*S*S*U*Ug{  EG  UX  Yb  Uc  Uc  lq  y}  MR  Sa  Mb  	c  	cC	$*Se
,
,
,-----r   __main__   z(usage: validator STORY.json OUTLINE.jsonr   r   )rC   r   r   syspathlibr   rA   rL   rM   rR   r   r   rc   __name__r   argvr7   r   r   <module>rj      s      				 



      %
  9 9 9  (. (. (.T Z
s38}}aIJKKKD!SXa[!!!!! r   