
    9Jj:                    l   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	  ee
      j                         j                  d   Zedz  ZdZd	Zd
Zh dZddhZh dZh dZh dZh dZd"dZd#dZd$dZd%dZd&dZd'dZd'dZd'dZd'dZ d'dZ!d(dZ"efd)dZ#d*dZ$edfd+dZ%d,d Z&e'd!k(  r e&        yy)-z2Build a compact title-start browser smoke summary.    )annotationsN)Path)Any   outztitle_start_browser_smoke.jsonz title_start_browser_summary.jsonz title_start_browser_summary.html>   hrefarmedmarkercommandItemssavedPayloadstartSnapshotvictoryResultbeforeSnapshotvictorySummaryplannedMovementprogressDetailsvictoryAutoSaveroutePathOptionsdirectPixelSamplespayloadBeforeMutationxy>   scenesearchmapName	bootError	hasScreen
readyStatetitleLoadedplayHudLinesquickLoadTexttitleMenuKeystitleMenuModetitleRouteGoalquickLoadHiddentitleMenuLabelstitleMenuRenderrouteGuideHiddentileReviewHiddentitleSavedatScanselectedTitleMenuIndex>*   savedr   loadedatahoHpr   pendingr   	herbCount	inputCode
atahoHpMaxr   
routeState
storyFlagsruntimeItemsruntimeMoneysaveHudLinesmovementInputr!   routeNextTextrouteNextTitleroutePathValuehasRuntimeStatepublicSaveValuer%   routeNextHiddenroutePathHiddenr(   trialTransitionsprototypeProgressruntimeCharactersselectedRouteGoalfieldEncounterModefieldEncounterSteprouteAssistAutoSavehasLoadedSaveSummaryfieldEncounterMenuLabeloriginalSavedataParserAvailable!originalEventVmRuntimeImplemented!originalPartyJoinEventImplemented!originalRoutePromotionImplemented#originalEncounterRuntimeImplemented#originalStoryFlagRuntimeImplemented>3   r   r   keytextr,   titleactionactivecountsr-   sourcetargetblockIdenabledhpAfteritemKeyactiveIdfeedbackhpBeforeitemNameselector	autoSaved	stepCount
completion
countAfter
foundCount
nextActioncountBeforeautoSavedMapmodeFeedbackrouteEvidencetransitionSoundblockReasonCountautoSavedRouteGoalinventoryItemSoundtransitionSoundSrcfieldEncounterSoundexternalProofInputIdmissingEvidenceCountinventoryItemSoundSrcrouteBlockerShortTextrouteProgressFeedbacktransitionSoundPlayedfieldEncounterSoundSrcinventoryItemSoundPlayedfieldEncounterSoundPlayedrI   %browserRuntimeSaveFeedbackImplemented'browserInventoryItemFeedbackImplemented'browserMapTransitionFeedbackImplemented(browserFieldEncounterFeedbackImplemented>   okkeysrP   indexrQ   beforelabelsclientXclientYrequest
sampleKeyssampleIndextargetIndexsampleLabelsrouteGoalKeyssampleClientXsampleClientYtargetClientXtargetClientYr"   r#   routeGoalLabelsrouteGoalWindowvisibleTargetIndexr+   c                p    | j                         r%t        j                  | j                  d            S i S )Nutf-8encoding)existsjsonloads	read_text)paths    :/home/exedev/hwanse/tools/summarize_title_start_browser.py	load_jsonr      s)    ;?;;=4::dnngn67PbP    c                b    t        t        j                  | dd      j                  d            S )NF,:ensure_ascii
separatorsr   )lenr   dumpsencode)payloads    r   compact_json_sizer      s&    tzz'*MTTU\]^^r   c           
        | j                         s|j                         sy t        |      }|sy t        |j                  d      xs( |j                  d      xs |j                  d      xs d      }|j	                  dd||dddd	       |S )
NlastRecordedSourceSizeBytesremovedRawSizeBytessourceSizeBytesr   zraw-removed-summary-retainedFzwRun tools/verify_title_start_browser.py locally to regenerate the ignored raw smoke when debugging browser regressions.a8  Compact title-start browser smoke contract. It keeps title/menu, start/continue, route-assist, inventory feedback, save feedback, map-transition feedback, and field-encounter markers consumed by completion audits. The checked-in raw smoke was removed; the verifier can regenerate it locally as an ignored output.)statusr   r   r   rawFilePresentrawRegenerationboundary)r   r   intgetupdate)r   summary_pathsummaryrecorded_sizes       r   fallback_removed_summaryr      s    {{}L//1%G12 	;;,-	;;()	 	M NN4 +8#0#  YB	
" Nr   c                t    t        | t              si S t        |      D ci c]  }|| v s|| |    c}S c c}w )N)
isinstancedictsorted)datafieldsrO   s      r   pickr      s7    dD!	&,VnDstCcNDDDs   	55c                D   t        | t              s| S t        | t        t        z        }| j                         D ]c  \  }}||v s|t        v rt        |t        t        t        t        f      s||||<   ;|dv s@t        |t              sQt        |t              ||<   e |S )N>   foottile)r   r   r   MARKER_FIELDSFOOT_FIELDSitems	DROP_KEYSstrr   floatbool)entryr   rO   values       r   compact_log_entryr      s    eT"
umk1
2Ckkm 0
U#:	)ec3t45CH$$E4)@E;/CH0 Jr   c                    t        | t              si S t        | dh      }t        | j                  d      t              r| d   |d<   |S )NrT   )r   r   r   r   r   r   s     r   compact_progressr      sD    dD!	
thZ
 C$((8$d+XHJr   c                L   t        | t              si S t        | t        t        z        }t        | j                  d      t              rt        | d   t        ddhz        |d<   t        | j                  d      t              rt        | d         |d<   t        | j                  d      t              rt        | d         |d<   t        | j                  d      t              rt        | d         |d<   t        | j                  d      t              rt        | d         |d<   |S )Nri   rq   rp   rt   rh   r\   rb   )r   r   r   r   r   r   compact_markerr   s     r   r   r      s    dD!	
t][0
1C$((?+T2#D$9=LbdzK{;{|O$((23T:'5d;R6S'T#$$((>*D1,T.-ABN$((:&-(j)9:J$((<($/*4+=>LJr   c                    t        | t              si S t        | h d      }t        | j                  d      t              rt	        | d         |d<   |S )N>   r   r   r_   ri   )r   r   r   r   r   r   s     r   compact_loaded_save_summaryr     sJ    dD!	
t+
,C$((?+T2-d?.CDOJr   c                B    t        | t              si S t        | h d      S )N>   afterr   	afterFoot
beforeFoot)r   r   r   )r   s    r   compact_movementr     s    dD!	DEEr   c                   t        | t              si S i }| j                         D ]  \  }}|t        v r|dk(  r$t        |t              rt	        |t
              ||<   9|dv rt        |t              rt        |      ||<   \|dv rt        |t              rt        |      ||<   |dk(  rt        |t              rt        |      ||<   |dk(  rt        |t              rt        |      ||<   |dk(  rt        |t              rt        |      ||<   |dk(  r t        |t              rt        |      ||<   |j                  d      s|j                  d	      rUt        |t              r|D cg c]  }t        |       c}||<   `t        |t              rt        |      ||<   |||<   |t        v s|t        v rUt        |t              rt        |      ||<   t        |t              r|D cg c]  }t        |       c}||<   |||<   |t         v r't        |t              rt        |      ||<   |||<   t        |t              rt        |      }|s:|||<   At        |t              r#|D cg c]  }t        |       }}|sm|||<   tt        |t"        t$        t&        t(        f      s||||<    |S c c}w c c}w c c}w )
Nr   >   r   r   >   modestepautoSave
openMarkerr3   
soundStateselectionLogfieldEncounterselectedMarkerr$   objectiveActionobjectiveBeforeobjectiveResultitemFeedbackLastr*   rD   titlePublicSavedatinventoryOpenMarkerobjectiveSoundStaterF   itemFeedbackLastRenderrouteCandidateAutoSaveruntimeSaveFeedbackLastinventorySelectionMarkerobjectiveCompletionNoticeobjectiveItemFeedbackLastfieldEncounterModeAutoSaveruntimeSaveFeedbackLastRenderobjectiveItemFeedbackLastRenderloadedSaveSummaryprogressrA   movementLogRender)r   r   r   r   r   r   compact_stater   r   r   r   endswithlistr   TITLE_STATE_FIELDSRUNTIME_STATE_FIELDSCLICK_FIELDSr   r   r   r   )r   r   rO   r   r   nested	compacteds          r   r   r     s   dD!	Cjjl L
U)&=Zt4E;/CH''Jud,C$U+CH 
 
> %%e,CH''Jud,C259CHJ:eT#:'.CH''Jud,C'.CHJ:eT#:'.CH\\% CLL$:%&BGH-e4HCE4(,U3C C&&#1E*E%&(/CE4(BGH-e4HC CL %&(/C Ct$"5)F!Ct$?DEe*51EIE$CS%675=CHYLZ J7 I I Fs   +K0K:Kc                d   | j                  d      | j                  d      | j                  d      | j                  d      dt         d}| j                         D ]Q  \  }}||v rt        |t              rt        |      ||<   *t        |t        t        t        t        f      s|M|||<   S |S )Nr   urltitleChecksummapChecksumout/)r   r   r   r  
sourceFile)
r   SOURCE_FILEr   r   r   r   r   r   r   r   )r   r   rO   r   s       r   compact_topr  q  s    ++h'{{5! _5{{=1[M*C mmo 
U#:eT"$U+CHS%675=CH Jr   c           	        | dz  }|t         z  }t        ||t        z        }||S t        |      }t	        |      }ddddt          d|j                         r|j                         j                  ndt        |      |dS )	Nr   z"hwanse-title-start-browser-summaryz&tools/summarize_title_start_browser.pyreadyr  a?  Compact title-start browser smoke contract. It keeps title/menu, start/continue, route-assist, inventory feedback, save feedback, map-transition feedback, and field-encounter markers consumed by completion audits. The raw title_start_browser_smoke.json is verifier output and should not be committed after regeneration.r   )kindrU   r   r  r   r   compactSizeBytes
titleStart)	r  r   SUMMARY_FILEr   r  r   statst_sizer   )rootout_dirsource_pathfallbackr   title_starts         r   build_summaryr    s    UlGK'K'W|5KLH$Gg&K4:[M*E :E9K9K9M;++-55ST-k:! r   c                L   | d   }t        | d         dd}| j                  d      r|dt        | d         ddz  }g }|j                         D ]e  \  }}|j                  dt	        j
                  t        |             d	t	        j
                  t        j                  |d
d            d d  d       g dt	        j
                  | d          dt	        j
                  | d          dt	        j
                  |       dt        | d         dddj                  |       dS )Nr
  r   r   z
 bytes rawr   z (removed; last recorded z bytes)z<tr><td><code>z</code></td><td>Fr   r   i  z
</td></tr>a!  <!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <title>Title Start Browser Summary</title>
  <style>
    body { margin: 24px; color: #202124; font-family: system-ui, sans-serif; line-height: 1.5; }
    table { width: 100%; border-collapse: collapse; margin: 14px 0 28px; }
    th, td { border: 1px solid #d7dce2; padding: 6px 8px; text-align: left; vertical-align: top; }
    th { background: #f4f6f8; }
    code { background: #f4f6f8; padding: 1px 4px; }
  </style>
</head>
<body>
  <h1>Title Start Browser Summary</h1>
  <p>r   z</p>
  <p><code>r  z	</code>: z, r	  zj bytes compact.</p>
  <table>
    <thead><tr><th>Field</th><th>Compact Value</th></tr></thead>
    <tbody> z$</tbody>
  </table>
</body>
</html>
)
r   r   r   appendhtmlescaper   r   r   join)r   r  raw_linerowsrO   r   s         r   	html_pager    sQ   ,'Kg/01!4J?H{{01/G<Y4Z0[\]/^^effD!'') 

USX./ 0;;tzz%ePZ[\]b^bcd e	

 kk'*%&' (KK-./yX9N8OrRUV]^pVqRrstQu v GGDM? ' r   c                   |j                  dd       |t        z  j                  t        j                  | ddd      d       |:|j
                  j                  dd       |j                  t        |       d       y y )NT)parentsexist_okFr   )r   	sort_keysr   r   r   )mkdirr  
write_textr   r   parentr  )r   r  html_outs      r   write_outputsr%    s{    MM$M.|''

7$:V (  dT:Ig.A r   c                 V   t        j                         } | j                  dt        t               | j                  dt        t
               | j                  dt               | j                         }t        |j                        }t        ||j                  |j                         y )Nz--root)typedefaultz	--out-dirz
--html-out)r'  )argparseArgumentParseradd_argumentr   ROOTOUT
parse_argsr  r  r%  r  r$  )parserargsr   s      r   mainr1    s}    $$&F
tT:
$<
40DDII&G'4<<7r   __main__)r   r   returndict[str, Any])r   r   r3  r   )r   r   r   r   r3  zdict[str, Any] | None)r   r   r   zset[str]r3  r4  )r   r   r3  r   )r   r   r3  r4  )r   r4  r3  r4  )r  r   r3  r4  )r   r4  r3  r   )r   r4  r  r   r$  zPath | Noner3  None)r3  r5  )(__doc__
__future__r   r)  r  r   pathlibr   typingr   __file__resolver  r,  r-  r  r  SUMMARY_HTMLr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r%  r1  __name__ r   r   <module>r?     s    8 "      H~''*
Ul.11	$ Cj *+ X4j:Q_@E"FQh$  $ 4$N <?X\ B8 zF r   