
    7q]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Zd dlZd dlZd dl	m
Z
  e
e                                          j        d         Zedz  Zg dZddZd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script/project-manifest.json)pov_knowledgeoutline_24_beatstimelinereveal_payoffcontinuity_propsagencyconsent_boundariesromance_arcprofession_engineidentity_namesfictional_worldending_codatts_suitability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/record-semantic-review.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'manifestdictkeyc                   |                      d          pi                      |          }t          |t                    r|st          d| d          t	          |          }|                                s
t          |z  }	 |                                                    t                                                     n%# t          $ r}t          d|           |d }~ww xY w|S )Nactive_pathszactive_paths.z is missingzactive path escapes project: )
get
isinstancer   RuntimeErrorr   is_absoluteROOTresolverelative_to
ValueError)r&   r(   valuer   excs        r   resolve_activer5      s    \\.))/R44S99EeS!! = =;3;;;<<<;;D d{K""4<<>>2222 K K K@3@@AAsJKKs   >C 
C$CC$r3   Nonec                   | j                             dd           t          j        |dd          dz                       d          }t          j        d| j         d| j         	          \  }}	 t          j	        |d
          5 }|
                    |           |                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            t          j                            |          rt          j        |           d S d S # t          j                            |          rt          j        |           w w xY w)NT)parentsexist_okF   )ensure_asciiindent
utf-8.)prefixdirwb)parentmkdirjsondumpsencodetempfilemkstempnameosfdopenwriteflushfsyncfilenoreplacer   existsunlink)r   r3   datafdrJ   r   s         r   atomic_jsonrV   -   s   KdT222Ju5;;;dBJJ7SSD'749'7'7'7T[IIIHBYr4   	&FLLLLNNNHV]]__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	
47>>$ 	IdOOOOO	 	27>>$ 	IdOOOO	s1   2D: AC#D: #C''D: *C'+D: :6E0intc            
     H	   t          j                    } |                     ddd           |                                 }t	          |j                  }t          j        t          	                    d                    }t          |d          }t          |d          }t          |d	          }t          |d
          }t          j        |	                    d                    }t          |          }	|                    d          dk    s|                    d          durt          d          |                    d          |	k    sD|                    d|                    d                    |                                j        k    rt          d          t          j        |	                    d                    }
t          j        |	                    d                    }|
                    d          |	k    rt          d          |
                    d          t!          t"                    st          d          fdt$          D             }|rt          d|           fdt$          D             }|rt          d|           |
                    dg           }d |D             }|
                    d          dk    oR| oOt'          fdt$          D                       o/|                    d          du o|                    d          |	k    }i d|rdnd d|d!t)          |          d|	dt)          |          d"t          |          d#t+          |	                    d                                                    d$|
                    d          dd|d%|d&t)          |          d't          |          d(t)          |          d)t          |          d*t.          j                            t.          j        j                                                  }t9          ||           t;          t          j        |d         |t+          |          t)          |          d+d,-                     |rd.nd/S )0Nz--review-jsonTzPath to reviewer-produced JSON)requiredhelpr>   )encoding	candidateproducer_close_receiptsemantic_markers_receiptsemantic_receiptstatus	completedwriter_closedzcandidate writer is not closedcandidate_sha256bytes
byte_countz,candidate differs from producer-close markerz1semantic review candidate hash is absent or stalegatesz'semantic review gates must be an objectc                    g | ]}|v|	S  rh   .0rJ   rf   s     r   
<listcomp>zmain.<locals>.<listcomp>U   s#    DDD$e2C2Ct2C2C2Cr   zsemantic review missing gates: c                ^    g | ])}t          |         t                    r
d |         v'|*S )verified)r,   r'   ri   s     r   rk   zmain.<locals>.<listcomp>X   s?    www$
5;PT8U8UwYckpqukvYvYvYvYvYvr   z!semantic review malformed gates: findingsc                    g | ];}t          |                    d d                                                    dv 9|<S )severity >   HIGHBLOCKER)r   r+   upper)rj   items     r   rk   zmain.<locals>.<listcomp>\   sE    jjjS*b1I1I-J-J-P-P-R-RVi-i-i-i-i-ir   verdictPASSc              3  R   K   | ]!}|                              d           du V  "dS )rm   TN)r+   ri   s     r   	<genexpr>zmain.<locals>.<genexpr>`   s8      OOd
++t3OOOOOOr   rm   failedcandidate_pathproducer_close_sha256words_whitespacereviewer_verdictblocking_findingssemantic_markers_pathsemantic_markers_sha256review_source_pathreview_source_sha256recorded_at)r`   rm   r   receiptFr;   r   r   )argparseArgumentParseradd_argument
parse_argsr   review_jsonrE   loadsMANIFEST_PATH	read_textr5   r   r+   r-   statst_sizer,   r'   REQUIRED_GATESallr   lensplitdatetimenowtimezoneutc	isoformatrV   printrF   )parserargssourcer&   r\   producer_closemarkers_pathoutputclosecandidate_hashreviewmarkersmissing	malformedrn   blockingrm   resultrf   s                     @r   mainr   <   s   $&&F
$=]^^^D$"##Fz-1171CCDDHx55I#H.FGGN!(,FGGLH&899FJ~///AABBEI&&Nyyk))UYY-G-Gt-S-S;<<<yy#$$66%))GUYYWcMdMd:e:eiriwiwiyiy  jB  ;B  ;BIJJJZ(('(::;;Fj///AABBGzz$%%77NOOOJJwEeT"" FDEEEDDDDDDDG HFWFFGGGwwww.wwwI LJyJJKKKzz*b))HjjjjjH

9' 	>L	>OOOOOOOOO	> KK
##t+	> KK*++~= 7++xH 	#i.. 	N	
 	!#n"5"5 	 !7!7 	C	 3 3W 3 E E K K M MNN 	FJJy11 	 	H 	X 	 \!2!2 	"6,#7#7 	c&kk 	v  	x(,,X->-BCCMMOO!F$ 	$*x 0h]`ai]j]jwz  |B  xC  xC  D  D  SX  Y  Y  Y  Z  Z  Z11ar   __main__rz   Fz: )r`   rm   errorr   )file)r   r   r   r   )r&   r'   r(   r   r   r   )r   r   r3   r'   r   r6   )r   rW   )
__future__r   r   r   r   rE   rK   sysrH   pathlibr   __file__r0   r8   r/   r   r   r   r5   rV   r   __name__exit	Exceptionr4   r   rF   typestderrrh   r   r   <module>r      s   " " " " " "     				 



       tH~~'*55           <  <  <  < ~ z   jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q s   1B C$A	CC$