
    Y ]j                     ~   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ  ee          	                                j
        d         Zedz  Zedz  Zedz  Zedz  Z ej        d	ej                  Z ej        d
          Z ej        d          Zd Zd Zd Zd Zedk    r ej         e                       dS dS )    N)datetimetimezone)Path   scriptstorychapterszpromotion-report.jsonu   [\wÀ-ỹĐđ]+uL   (?im)^\s*(?:chương|phần|cảnh)\s+(?:\d+|[ivxlcdm]+)\s*[:.\-–—]?\s*$u[   (?i)\b(?:scene_id|target_words|production note|ghi chú sản xuất|end state|reveal_id)\bc                 ^    t          j        t          | z                                            S N)jsonloadsSCRIPT	read_text)names    script/validate-story.pyloadr      s"    :v}//11222    c                 N    t          j        |                                           S r   )hashlibsha256	hexdigest)datas    r   	sha_bytesr      s    >$))+++r   c                 P    t          t                              |                     S r   )lenWORD_REfindall)texts    r   wordsr      s    wt$$%%%r   c            
        ' t          d          } t          d          }t          d          }t          d          }t          d          }g }t          t          dz                                            t          t          dz                                            t          t          dz                                            d}||                    d          k    r|                    d           |                    d	d
                              d          |                    dd
                              d          |                    dd
                              d          d}||k    r|                    d           t          |d                   }d t          d|dz             D             }	d |	D             }
|
r+|                    dd	                    |
          z              g g }}t          |	d          D ]E\  }}|                                s|                                                                }|                    |           |s|                    d|dd           t                              |          r|                    d|dd           t                               |          r|                    d|dd           |                    |t#          |                    t&                              t)          |          t          |                                          d           Gt+          |          |k    r*d	                    |                                          dz   nd
}t,          dz  }|                                r|                                nd
}t/          |          o||k    }|s|                    d           t)          |          }|d         \  }}||cxk    r|k    s n |                    d | d!| d"|            g }g }|                    d#g           D ]}|                    d$g           |                    d%g           z   |                    d&g           z   D ]I}|s|                    d' t3          j        t3          j        |          |          D                        J|                    d#g           D ]}|                    d(d)          d)k    r|                    d*g           D ]}t3          j        d+t3          j        |           d,          }|                    |          D ]'t;          'fd-|D                       r|t=          d.'                                d/z
            '                                 d/z            }|                    |d0         ||d1           |r%|                    d2t+          |                      g }d3 t          |          D             }d4d5gd6d7gd8d9gg d:d;} |                    d<g           D ]}!t          |!d=                   }"t          d|"          D ]~}#|                    |#d
          !                                }$|                     |!d>         g           D ]7}%|%!                                |$v r|                    |!d>         |#|%d?           8|r%|                    d@t+          |                      i dAddB|sdCndDdE| dF| dF         d|dGt+          |          dH|dIt#          |                    t&                              dJ|dK|dL||gdMtE          |dNz  dO          dP|r!t          |#                                          nd dQ|dR|dS|dT|dUtI          j%        tL          j'                  (                                i}&tR          *                    tW          j,        |&dVdWX          dz              t[          tW          j,        |&dE         ||dYdVZ                     |&dE         rd.ndS )[Nzoutline.jsonzidentity-registry.jsonzreveal-ledger.jsonzproduction-plan.jsonzproject-manifest.json)outline_sha256identity_registry_sha256reveal_ledger_sha256authority_hashesz8current authority bytes differ from production-plan lockoutline_hash zsha256:identity_registry_hashreveal_ledger_hashz9current authority bytes differ from project-manifest lockexpected_chaptersc                 *    g | ]}t           |d dz  S )02dz.txt)CHAPTERS).0indexs     r   
<listcomp>zmain.<locals>.<listcomp>5   s)    OOOuX5*****OOOr   r   c                     g | ]=}|                                 t          |                    t                              >S  )existsstrrelative_toPROJECT)r-   paths     r   r/   zmain.<locals>.<listcomp>6   s;    UUU$t{{}}Us4##G,,--UUUr   zmissing chapters: z, zchapter r+   z emptyz contains spoken headingz contains production marker)chapterr6   r   r   z


zspoken-narration.txtz-spoken narration is not exact sequential joinaccepted_rangezword count z	 outside -entitiesallowed_narrative_namesallowed_title_namesrole_addressc              3   f   K   | ],}|                                 |                                fV  -d S r   startend)r-   matchs     r   	<genexpr>zmain.<locals>.<genexpr>V   s7      $t$teekkmmUYY[[%A$t$t$t$t$t$tr   entity_type	characterforbidden_bare_namesu   (?<![\wÀ-ỹĐđ])u   (?![\wÀ-ỹĐđ])c              3   ~   K   | ]7\  }}|                                 k    o                                |k    V  8d S r   r@   )r-   rA   rB   rC   s      r   rD   zmain.<locals>.<genexpr>]   sG      iiPSu-D%))++2Diiiiiir   r      	full_name)entitybarecontextzidentity gate hits: c                      i | ]\  }}|d z   |S )r   r1   )r-   ir   s      r   
<dictcomp>zmain.<locals>.<dictcomp>d   s"    @@@GAtAE4@@@r   u/   tám lọ có lịch sử mở nắp khác nhauu$   tám lớp cặn không giống nhauu   máy ghi nhiệt thứ haiu@   thiết bị ghi nhiệt dự phòng còn lưu dữ liệu gốcu    mã niêm phong bị tách đôiu-   mã niêm phong bị chia qua hai bộ phận)u$   Minh Khải ra lệnh sửa hồ sơu/   chiếm quyền quy trình ổn định nhiệtu   chủ mưu tráo nhãn)rev_001rev_002rev_003rev_004revealsnot_before_part	reveal_id)rW   parttermzprotected reveal hits: versionstatuspassedfailedverifiedcanonical_titlechapters_presentchapter_rowsspoken_narrationexact_sequential_jointotal_wordstarget_rangeestimated_minutes_at_baselineg(\*m@   spoken_sha256authority_hashes_currentidentity_hitsprotected_reveal_hitsissues
checked_atF   )ensure_asciiindent)r^   r   rl   )ro   ).r   r   r   
read_bytesgetappendremoveprefixintrangejoin	enumerater2   r   strip
HEADING_REsearchPRODUCTION_REr3   r4   r5   r   r   STORYboolextendrefinditerescapecompileanymaxrA   rB   lowerroundencoder   nowr   utc	isoformatREPORT
write_textr   dumpsprint)(outlineregistryledgerplanmanifestrl   	authorityexpected_manifestexpectedpathsmissingrowstextsr.   r6   r   joinedspoken_pathactual
exact_joinrd   lowhighrj   all_allowed_spansrK   r   rL   patternrM   reveal_hitschapter_textdetection_termsreveal	thresholdrX   r   rY   reportrC   s(                                          @r   mainr      s	   >""G,--H&''F&''D+,,HF#Vn%<$H$H$J$JKK$-v8P/P.\.\.^.^$_$_ )64H+H*T*T*V*V W W I
 DHH/0000PQQQ",,~r::GG	RR$,LL1I2$N$N$[$[\e$f$f (-A2 F F S ST] ^ ^ 
 %%%QRRR4+,--HOOaA8N8NOOOEUU%UUUG A*TYYw-?-??@@@b%D ** N Nt{{}} 	~~%%''T 	8MM6U6666777T"" 	JMMHUHHHHIII%% 	MMMKUKKKKLLLs43C3CG3L3L/M/MX]^bXcXcoxy}  zI  zI  zK  zK  pL  pL  M  M  	N  	N  	N  	N25e**2H2HV[[%%''$..bF00K(3(:(:(<(<D[""$$$"Ff2&F"2J GEFFF--K%&IC+%%%%%%%%FKFF#FFFFGGGM,,z2.. u uJJ8"==

K`bd@e@eehnhrhr  tB  DF  iG  iG  G 	u 	uD $$$t$tr{[][dei[j[jlrOsOs$t$t$ttttt	u ,,z2.. 	h 	h::m[11[@@JJ5r:: 	h 	hDj![	$![![![\\G ))&11 h hiiiiWhiiiii  Qb(8!9!9%))++b.!HI$${0CT^e%f%fgggg	h	h  CAS-?-?AABBBK@@y/?/?@@@LEGmn02tu68gh I  I  I	 O **Y++ g g0122	!Y'' 	g 	gD $$T2..4466E'++F;,?DD g g::<<5((&&VK5HRV`d'e'efffg	g
  DBK0@0@BBCCC1&6((h 	J 	7#45	
 	X 	CII 	 	C 7 7 @ @AA 	  	{ 	d 	({V/CQ)G)G 	vG6==??3334 	#I 	  	 !" 	&#$ 	hl8<00::<<% F( djeAFFFMNNN	$*&"4{V\]]lq
r
r
rsssz")11)r   __main__)r   r   r   sysr   r   pathlibr   __file__resolveparentsr5   r   r}   r,   r   r   UNICODEr   rz   r|   r   r   r   r   __name__exitr1   r   r   <module>r      sJ     				 



 ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-	8	':	(	(
"*'
4
4RZghh

yzz3 3 3, , ,& & &k* k* k*Z zCHTTVV r   