
    ,p\j&              
         d dl mZ d dlZd dlZd dlZd dlZd dlmZ  ee          	                                j
        d         Zedz  edz  edz  edz  ed	z  ed
z  dZddZddZedk    rw	  ej         e                       dS # e$ rTZ e ej        dd ee          j         de dd          ej                    ej        d           Y dZ[dS dZ[ww xY wdS )    )annotationsN)Path   z&work/story/run-001/story-candidate.txtzstory/story-canon.txtzstory/spoken-narration.txtzlog/promotion.jsonzscript/story-manifest.jsonzscript/project-manifest.json)	candidatecanon	narration	promotionstory_manifestproject_manifestpathr   returnstrc                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   script/verify-promotion.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)r   digestchunkr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'intc                 R   d t                                           D             } | rt          d|            t          j        t           d                             d                    }t          j        t           d                             d                    }t          j        t           d                             d                    }t           d                                         }t           d	                                         }t           d
                                         }|                    dd          }d dD             }t          t          j
        d|                    t          t          j
        d|                    t          t          j
        d|t          j                            t          t          j
        d|t          j                            d}	|                    d          dk    o|                    d          du ||cxk    o|k    nc t          t          |                                                    dk    |                    d          |d         k    o=|                    d          |d	         k    o|                    d          |d
         k    |                    d          |d         k    o=|                    d          |d	         k    o|                    d          |d
         k    |                    d          |d	         k    o|                    d          |d
         k    |                    d          dk    o|                    d          dk    or|                    d          dk    oY|                    d i                               d!          dk    o,|                    d i                               d"          dk    |                    d#          t          |                                          k    t!          |	                                           t#          d$ |                    d%i                                           D                       d&
}
t#          |
                                          }|rdnd'||d         |d	         |d
         t          |                                          d( |
                                D             |	d) |
                                D             d*	}t&          d+z  }|                    t          j        |d,d-.          d/z   d           t-          t          j        |d         ||d0         t/          |          d1d,2                     |rd3ndS )4Nc                T    g | ]%}|                                 t          |          &S  )existsr   ).0r   s     r   
<listcomp>zmain.<locals>.<listcomp>   s+    IIIT4;;==Is4yyIIIr   zpromotion bundle missing: r	   zutf-8)encodingr
   r   r   r   r   strict)errorsc                D    i | ]}|t          t          |                   S r"   )r   FILES)r$   names     r   
<dictcomp>zmain.<locals>.<dictcomp>(   s&    XXXDdF5;''XXXr   )r   r   r   z(?m)^\s*#{1,6}\s+u@   (?mi)^\s*(?:chương|phần|cảnh|scene|act)(?:\s+\d+|\s*[:.-])z\b(?:TODO|TBD|PLACEHOLDER)\bu+   Gác Mái Audio|đăng ký kênh|like video)headingscene_markerplaceholderchannel_ctastatus	completedverifiedTr   candidate_sha256canon_sha256spoken_narration_sha256promoted
media_gater   story_promotedstepsstory
voice_testwords_whitespacec              3  X   K   | ]%}t          |                                          V  &d S )N)r   r#   )r$   values     r   	<genexpr>zmain.<locals>.<genexpr>9   s4      "q"qE4;;#5#5#7#7"q"q"q"q"q"qr   gate_receipts)
promotion_verifiedbyte_equalityhash_equalitypromotion_hashesstory_manifest_hashesproject_manifest_hashesmanifest_states
word_countnarration_hygienegate_receipts_existfailedc                     i | ]\  }}|||d S ))r3   r?   r"   r$   r+   r?   s      r   r,   zmain.<locals>.<dictcomp>C   s&    ___u4ee<<___r   c                    g | ]	\  }}||
S r"   r"   rN   s      r   r%   zmain.<locals>.<listcomp>E   s!    IIIkdE5ITIIIr   )	r1   r3   r4   r5   r6   r=   checkshygiene_findingsblockerszlog/promotion-verification.jsonF   )ensure_asciiindent
rR   )r1   r3   rR   receiptrT   r   )r*   valuesRuntimeErrorjsonloads	read_text
read_bytesdecodeboolresearchIgetlensetsplitanyallitemsROOT
write_textdumpsprintr   )missingr	   r;   projectcandidate_bytescanon_bytesnarration_bytescandidate_texthasheshygienerP   r3   resultoutputs                 r   mainry      sa   IIU\\^^IIIG CAAABBB
5-777IIJJIJu-.88'8JJKKEj12<<g<NNOOGK(3355O.++--KK(3355O$++GH+EENXX4WXXXF	"6GGHHRY'jlz{{||BI&E~WYW[\\]]BI&TVdfhfjkkll	 G (mmH55DjWaIbIbfjIj(KJJJJ?JJJJS1122a7%MM*<==ATT  NYbYfYfguYvYv  {A  BI  {J  ZJ  N  OX  O\  O\  ]v  Ow  Ow  {A  BM  {N  ON!&+=!>!>&BU!U  "GZ_ZcZcdrZsZsw}  F  xG  [G  "G  LQ  LU  LU  Vo  Lp  Lp  tz  {F  tG  LG#*;;~#>#>&/#Q  $TV]VaVab{V|V|  AG  HS  AT  WT 99X..*<  H<AXAX\bAb  Hgngrgrs{g|g|  AQ  hQ  H  V]  Va  Va  bi  km  Vn  Vn  Vr  Vr  sz  V{  V{  J  VJ  H  OV  OZ  OZ  [b  df  Og  Og  Ok  Ok  lx  Oy  Oy  }H  OHmm$6773~?S?S?U?U;V;VV!$W^^%5%5!6!66""q"qY]]SbdfEgEgEnEnEpEp"q"q"qqq F 6==??##H!)7++x";/w#)+#6 4 4 6 677__PVP\P\P^P^___#IIV\\^^III
 
F 55F
djeAFFFMX_```	$*x 0hTZ[eTfsvw}s~s~  OT  U  U  U  V  V  V11ar   __main__rL   Fz: )r1   r3   errorrX   )file)r   r   r   r   )r   r   )
__future__r   r   r[   ra   syspathlibr   __file__resolveparentsrk   r*   r   ry   __name__exit	Exceptionexcrn   rm   typestderrr"   r   r   <module>r      s   " " " " " "   				 



      tH~~'*@@++44,,99==	 	   -  -  -  - ` z   jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q s   /B	 	C"A	CC"