
    ^j<(                         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d Zd Z	d Zd Zd	 Zd
 Zd Zd Zedk    r e             dS dS )    N)Path   zscript/project-manifest.jsonc                    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/audit-final-publish-ready.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)pathdigestblockr	   s      @r
   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'c                 `   |                      di                                |          }|st          d| d          t          |          }|                                r|n	t          |z  }|                                }|                    t                                                     |S )Nactive_pathszactive_paths.z missing)getRuntimeErrorr   is_absoluteROOTresolverelative_to)manifestkeyvaluer   s       r
   r   r      s    LL,,0055E :83888999;;D##%%6444$;D<<>>DT\\^^$$$Kr   c                 X   t          | |          }t          j        |                    d                    }|                    d          dk    s|                    d          durt          | d          |                    d          }||k    rt          | d	          ||fS )
Nutf-8encodingstatus	completedverifiedTz not terminal verifiedsource_canon_sha256z canon mismatch)r   jsonloads	read_textr   r   )r   r   canonr   r    receipt_canons         r
   load_receiptr.   !   s    8S!!DJt~~w~7788Eyyk))UYYz-B-B$-N-Nc999:::II344Mc222333;r   c                     t          j        dddddddddt          |           g
d	d	d	
          }t          j        |j                  S )Nffprobez-verrorz-show_entriesz format=duration,size,format_namez>stream=codec_type,codec_name,width,height,sample_rate,channelsz-ofr)   T)capture_outputtextcheck)
subprocessrunstrr)   r*   stdout)r   results     r
   prober:   ,   sy    ^	D'?4VXg  jj  lq  sy  {~  C  {D  {D  	E$d  F :fm$$$r   c                     |                      | j        dz             }|                    t          j        |dd          dz   d           t          j        ||            d S )Nz.partF   )ensure_asciiindent
r"   r#   )with_suffixsuffix
write_textr)   dumpsosreplace)r   r    parts      r
   atomic_jsonrG   4   sa    DK'122DOODJu5CCCdJU\O]]]JtTr   c                 P   | d         }t          | d|          \  }}t          | d|          \  }}t          | d|          \  }}t          | d|          \  }}	t          | d          }
t          | d          }t          |
          |                    d          k    rt	          d	          |	                    d
          pi                     d          pi }|                    d          dus&|                    d          t          |          k    rt	          d          |                    d          t          |          k    rt	          d          t          |
          }|                    dg           }d |D             }d |D             }t          |d         d                   }t          |d                   t          |d                   z   }dt          |          dk    o|d                             d          dk    t          |          dk    o|d                             d          dk    t          |          dk    o9|d                             d          |d                             d          fdk    t          ||z
            d k    |                    d!i                               d          du |                    d          du |                    d          |                    d          k    |                    d"          du o/|                    d#          d$k    o|                    d%          du dd&
}t          |
                                          st	          d'|           t          j                            t          j        j                                                  }t          | d(          }d)d|d*d+d+t!          |                    t$                              t          |          t!          |                    t$                              t          |          d,t!          |                    t$                              t          |          d-t!          |                    t$                              t          |          d-t!          |                    t$                              t          |          d-d.t!          |
                    t$                              t          |
          ||d         |d         |d/|||d0}|                                rt	          d1          t)          ||           t+          j        t.                              d23                    }d)dt!          |                    t$                              |d         |d4|d5<   ||d6<   t)          t.          |           t3          t+          j        d)dd5t!          |          |d         d7d+8                     d S )9Ncanon_sha256final_receiptintro_receiptfootage_receiptartwork_visual_receiptfinal_masterintro_posterartifact_sha256zfinal artifact hash driftnormalized_gatesintror'   Tr   z"intro poster visual lineage failedposter_sha256z-intro video does not reference current posterstreamsc                 D    g | ]}|                     d           dk    |S )
codec_typevideor   .0rows     r
   
<listcomp>zfinal_qa.<locals>.<listcomp>K   .    IIIc(=(=(H(Hc(H(H(Hr   c                 D    g | ]}|                     d           dk    |S )rV   audiorX   rY   s     r
   r\   zfinal_qa.<locals>.<listcomp>L   r]   r   formatdurationduration_secondsr   r   
codec_nameh264aacwidthheight)i  i8  g{Gz?endpoint_verificationmirror_appliedhorizontal_mirrorhflipsource_audio_discarded)

final_hashone_h264_videoone_aac_audioresolution_1920x1080#duration_matches_intro_plus_footageendpoint_verified$intro_visual_provider_still_verifiedintro_poster_hash_linkedfootage_integrity_verifiedno_footage_visual_evidencezfinal QA failed: final_qa_receiptr&   z]machine integrity for final plus direct visual verification of provider-rendered intro posterF)r   r   rM   artwork_visual_receipt_sha256r   r   )rJ   rK   rL   )rR   footageexpected_sum)r%   r'   r(   scopefootage_visual_review_performed video_frame_extraction_performedintro_visual_evidenceinputsoutput_pathrP   rb   duration_basisindependent_probecheckscompleted_atzfinal QA receipt already existsr"   r#   )r%   r'   receiptrP   r   final_qa
updated_at)r%   r'   stager   rP   r=   )r.   r   r   r   r   r:   floatlenabsallvaluesdatetimenowtimezoneutc	isoformatr7   r   r   existsrG   r)   r*   MANIFESTr+   printrC   )projectr,   final_receipt_pathrJ   intro_receipt_pathrK   footage_receipt_pathrL   artwork_pathartworkoutputposternormalized_introinforT   videosaudiosra   expectedr   r   receipt_pathr   latests                           r
   r   r   :   s   N#E(4Wou(U(U%(4Wou(U(U%,8BSUZ,[,[)/(2JERRL'Wn--FWn--Ff~~**+<====6777$677=2BB7KKQrJ''t337G7K7KH7U7UY_`fYgYg7g7g?@@@))VF^^;;JKKK==Dhhy"%%GIIWIIIFIIWIIIFT(^J/00H]#5677%Pb@c:d:ddHf++*Tvay}}\/J/Jf/TV)RfQimmL.I.IU.R #Fq 0 vfQimmG6L6LfUVimm\dNeNe5fjv5v/28h3F/G/G4/O*../FKKOOPZ[[_cc0@0D0DZ0P0PTX0X$1$5$5o$F$FJZJ^J^_gJhJh$h&5&9&9:J&K&Kt&S  'FXgXkXkl  YA  YA  EL  YL  'F  Q`  Qd  Qd  e}  Q~  Q~  BF  QF&* F v}} 97v77888



 1 5
6
6
@
@
B
BC7$677L4p+0,1*-f.@.@.F.F*G*GSYZ`SaSa  ~A  BN  BZ  BZ  [_  B`  B`  ~a  ~a  DJ  KW  DX  DX  "Y  "Y&)*<*H*H*N*N&O&O[abt[u[uvv&)*<*H*H*N*N&O&O[abt[u[uvv(+,@,L,LT,R,R(S(S_efz_{_{||
 

 6--d3344PV$-PbBcp  AS  qT  fn  9o  9o!VS G  ><===g&&&Z**G*<<==F$/TcR^RjRjkoRpRpNqNq  GN  O`  Ga  sv  w  wF:F<&!!!	$*
_bco_p_p  FM  N_  F`  a  a  pu  v  v  v  w  w  w  w  wr   c                    | d         }g d}i }|D ]P}t          | ||          \  }}t          |                    t                              t	          |          d||<   Qt          | d          }t          | d          }t          | d          }	t          j        t          | d                              d	                    }
t          j        t          | d
                              d	                    }t          j        t          | d                              d	                    }|	                                r:|
                                j        dk    s|
                                j        dk    rt          d          t	          |          |
                    d          k    s0|
                                j        |
                    d          k    rt          d          |
                    di                               d          durt          d          t	          |	          |                    d          k    rt          d          |                    d          dus|                    d          durt          d          t          |                    t                              t	          |          |
                                j        dt          |                    t                              t	          |          |
                                j        dt          |	                    t                              t	          |	          |	
                                j        dd}t          j                            t          j        j                                                  }t          | d          }|                                rt          d          dd||                     d           ||ddddddt)          t                              d!                     ot          d"z                                   d#|d$}t-          |d%                                                   st          d&|d%                    t1          ||           t          j        t2                              d	                    }d|d'         d(<   ddt          |                    t                              |d)         d*         |d+|d(<   ||d,<   t1          t2          |           t5          t          j        ddd(t          |          |d)         d-d.                     d S )/NrI   )promotion_receipttts_receiptartwork_generation_receiptrM   layout_receiptrK   rL   rJ   rw   transcode_receiptmetadata_receiptry   final_uploadrO   metadatar   r"   r#   r   rw   r   i ʚ;z1upload copy absent or not under one billion bytesrP   artifact_bytesz$upload copy transcode lineage failedrh   under_one_gbTz*endpoint under-one-GB verification missingzmetadata hash driftr~   Fr}   z*forbidden footage visual evidence detected)r   r   bytes)upload	thumbnailr   publish_ready_receiptz$publish-ready receipt already existsr&   active_versionzDO_NOT_PUBLISH*publish_block) all_receipts_terminal_same_canon#upload_copy_under_one_billion_bytesupload_copy_hash_linkedmetadata_hash_linkedthumbnail_hash_lockedfootage_visual_qa_absentpublish_block_absent)r%   r'   r(   r   receipts	artifactsr   r   r   zpublish-ready blockers: stepspublish_readyr   r   )r%   r'   r   upload_sha256r   r   )r%   r'   r   r   r   r   )r.   r7   r   r   r   r   r)   r*   r+   is_filestatst_sizer   r   r   r   r   r   r   r   anyglobr   r   rG   r   r   rC   )r   r,   receipt_keysrecordsr   r   r    r   r   r   	transcoder   rw   r   r   r   r   r   s                     r
   r   r   x   s   N#E  L
 G U U"7C77e #D$4$4T$:$: ; ;vd||TTWn--F00Iw
++H
77,?@@JJT[J\\]]Iz''3E"F"F"P"PZa"P"b"bccz''3E"F"F"P"PZa"P"b"bcc>> Pv{{}}499V[[]]=RVc=c=cNOOOf~~'89999V[[]]=RV_VcVcdtVuVu=u=uABBB}},b1155nEETQQGHHHh+//0ABBBB0111>??uLLP`PdPd  fG  QH  QH  PU  QU  QUGHHHv11$7788F6NN]c]h]h]j]j]rss!)"7"7"="=>>&QZJ[J[foftftfvfvf~ !5!5d!;!;<<xHXHXckcpcpcrcrcz{{ I
 


 1 5
6
6
@
@
B
BCW566F}} CABBB4!++&677W0437'+$(%)(,(+DII6G,H,H(I(I$I$sSWZiSiRqRqRsRsNs
 
  G wx ''))** KIgh6GIIJJJ   Z**G*<<==F'2F7OO$)4$SVW]WiWijnWoWoSpSp  DM  NV  DW  X`  Da  sv  w  wF?F<&!!!	$*dghndodo  |E  FN  |O  P  P  _d  e  e  e  f  f  f  f  fr   c                  2   t          j                    } |                     dd           |                                 }t	          j        t                              d                    }|j        dk    rt          |           d S t          |           d S )Nr   )final-qazpublish-ready)choicesr"   r#   r   )argparseArgumentParseradd_argument
parse_argsr)   r*   r   r+   r   r   r   )parserargsr   s      r
   mainr      s    $&&F
)FGGGDj++W+==>>Gz11HW}W7M7M7M7M7Mr   __main__)r   r   r   r)   rD   r5   pathlibr   __file__r   parentsr   r   r   r.   r:   rG   r   r   r   __name__ r   r
   <module>r      s#       				          tH~~'*00      % % %  ;w ;w ;w|;f ;f ;f|N N N zDFFFFF r   