{"kind":"hwanse-mobile-browser-controls-summary","source":"tools/summarize_mobile_browser_controls.py","status":"raw-removed-summary-retained","sourceFile":"out/mobile_browser_controls_smoke.json","boundary":"Compact browser runtime-controls smoke contract. It keeps the top-level status/search fields and checks used by movement, completion, and event/battle audit surfaces. The checked-in raw smoke was removed; the verifier can regenerate it locally as an ignored output.","sourceSizeBytes":0,"compactSizeBytes":14932,"controls":{"status":"passed","base":"http://127.0.0.1:8013","initialUrl":"http://127.0.0.1:8013/web/game.html?map=map1_02b&startTile=11%2C12&party=rinshan%2Csmash&spriteDebug=1&moveMs=80","movementSearch":"?map=map1_02b&startTile=16%2C13&party=rinshan%2Csmash&spriteDebug=1&moveMs=80","normalRouteSearch":"?map=map1_01a&startTile=11%2C11&moveMs=80&_=1781070545503107242","routeAssistSearch":"?map=map2_02d&trialTransitions=routeAssist&startTile=47%2C46&moveMs=80&_=1781070567835403370","routeContinueSearch":"?map=map2_18d&trialTransitions=routeAssist&startTile=47%2C47&moveMs=80&_=1781070567835403370&focusTile=46%2C0&collision=1&overview=1","routeGoalSearch":"?map=map1_01a&startTile=11%2C11&trialTransitions=routeAssist&routeGoal=map2_18d&routeAutoSave=1","routeGoalBlockerSearch":"?map=map1_01a&startTile=18%2C0&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&transitionTarget=map2_02d&routeGoal=map2_18d&routeAutoSave=1","routeGoalTargetSearch":"?map=map2_02d&startTile=47%2C47&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&routeGoal=map2_18d&routeAutoSave=1&routeStepSource=map1_01a&routeStepTarget=map2_02d&routeStepKind=routeAssist-blocker","routeGoalCandidateSearch":"?map=map2_02d&trialTransitions=routeAssist&transitionTarget=map2_18d&overview=1&routeGoal=map2_18d&routeAutoSave=1&startTile=49%2C26","routeGoalFinishSearch":"?map=map2_18d&trialTransitions=routeAssist&overview=1&routeGoal=map2_18d&routeAutoSave=1&startTile=49%2C26&routeStepSource=map2_02d&routeStepTarget=map2_18d&routeStepKind=save-selector-trial","routeReturnFocusSearch":"?map=map1_01a&startTile=18%2C0&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&transitionTarget=map1_02b&routeGoal=map1_02b&routeAutoSave=1","routeReturnTargetSearch":"?map=map1_02b&startTile=58%2C95&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&routeGoal=map1_02b&routeAutoSave=1&routeStepSource=map1_01a&routeStepTarget=map1_02b&routeStepKind=reciprocal-return-trial","checks":{"canvasJoystick":"checksum 3985046802->3077891559; knobX=48px","documentJoystick":"active=True; knobY=48px","overviewButton":"?map=map1_02b&startTile=16%2C13&party=rinshan%2Csmash&spriteDebug=1&moveMs=80&overview=1 -> ?map=map1_02b&startTile=16%2C13&party=rinshan%2Csmash&spriteDebug=1&moveMs=80","mapFilter":"2 options; selected=map1_02b","mobileMenuButton":"hidden=False False->True->False selectedAfterMove=1 menuConfirmSoundCount=2 menuMoveSoundCount=1 menuSound=runtime-menu-sound:open,move,close menuSoundSrcs=../extract_wlk/04.wav,../extract_wlk/03.wav,../extract_wlk/04.wav","routeAssistControls":"hiddenBefore=True; shownAfter=True; targets=25","savedatScanHud":"savedat scan: no captured saves; put savedat1-9 .dat/.zip in SAVEDATA or ...; or drag a savedat .dat/.zip onto this sc...; need 2:0 0x00540714","sounds":"9 WAV keys; step=0.3499999940395355 transition=0.550000011920929 battle=../extract_wlk/08.wav movementStepCount=3 dialogueCount=2 battleStartCount=1 battleHitCount=11 victoryCount=1","dialogue":"dialogueButton event-dialogue-block-005 line 0->1 vmPartial=True vmFull=False vmOpcodes=0x0d,0x0b,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x0b vmRender=2 vmDriven=2/13 vmCoverage=partial-render-prefix vmSource=0x00030000","menuParty":"?map=map1_02b&startTile=11%2C12&menu=1&moveMs=80&_=1781070544122502835&party=rinshan; quickLoad=Rinshan ?map=map1_02b&startTile=11%2C12&menu=1&moveMs=80&_=1781070544122502835&party=rinshan","normalRoute":"1181444564->2012782931; ?map=map1_01a&startTile=11%2C11&moveMs=80&_=1781070545503107242","routeGoalNext":"map2_18d map1_02b -> map1_01a (confirmed); 전환 진행 0/1 · 후보 진행 0/2 -> ?map=map1_01a&startTile=11%2C11&trialTransitions=routeAssist&routeGoal=map2_18d&routeAutoSave=1","routeGoalBlocker":"map1_01a -> map2_02d (trial-only); 전환 완료 1/1 · 후보 진행 0/2; trial-only: no map1_01a->map2_02d transition-review row; no strict map1_01a event transition; coordinate refs are non-promotable; variant coordinate scan found no strict source coordinate; tile signature matches only as geometry/tile evidence -> ?map=map1_01a&startTile=18%2C0&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&transitionTarget=map2_02d&routeGoal=map2_18d&routeAutoSave=1","routeGoalClickThrough":"진입 ?map=map2_02d&startTile=47%2C47&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&routeGoal=map2_18d&routeAutoSave=1&routeStepSource=map1_01a&routeStepTarget=map2_02d&routeStepKind=routeAssist-blocker; 후보 ?map=map2_02d&trialTransitions=routeAssist&transitionTarget=map2_18d&overview=1&routeGoal=map2_18d&routeAutoSave=1&startTile=49%2C26; 진입 ?map=map2_18d&trialTransitions=routeAssist&overview=1&routeGoal=map2_18d&routeAutoSave=1&startTile=49%2C26&routeStepSource=map2_02d&routeStepTarget=map2_18d&routeStepKind=save-selector-trial","routeReturn":"map1_01a -> map1_02b (manual-review-only); 후보 진행 0/1 -> ?map=map1_01a&startTile=18%2C0&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&transitionTarget=map1_02b&routeGoal=map1_02b&routeAutoSave=1; 진입 ?map=map1_02b&startTile=58%2C95&focusTile=18%2C0&collision=1&overview=1&trialTransitions=routeAssist&routeGoal=map1_02b&routeAutoSave=1&routeStepSource=map1_01a&routeStepTarget=map1_02b&routeStepKind=reciprocal-return-trial","battle":"battleButton Ataho->Rinshan; normalTurnAutoSource=battle-turn-prototype; normalTextTable=atahoActions normalTextRef=0x004d24ac normalTextVa=0x004d2d8c; nextCommandTextTable=skillNamesB nextCommandTextRef=0x004d2c04 nextCommandTextVa=0x004d4d68; rewardGranted=True; autoSource=battle-victory; quickLoadMoney=75; quickLoadParty=Rinshan,Smashu","savedatBattleItem":"ATK=22 DEF=7 damage=109/8; attackTextTable=atahoActions attackTextRef=0x004d24ac attackTextVa=0x004d2d8c; Rinshan=장궁,충격파; Smashu=마구베기,투구쪼개기; partySkillExec=장궁/투구쪼개기; partySkillTextRefs=Rinshan:0x004d2c5c->0x004d4ee2,Smashu:0x004d2c2c->0x004d4e1e; skill=돌려차기 individual#0 skillTextTable=atahoActions skillTextRef=0x004d24b4 skillTextVa=0x004d2daa MP 999->997; skillAutoSource=battle-skill-prototype; skillFeedback=battle-skill-use:Ataho:돌려차기:돌려차기 -112 / MP -2,battle-skill-completion-notice-feedback:Ataho:돌려차기:전투 기술 완료 1/1; skillFeedbackRender=True; skillFeedbackSound=battleHit:../extract_wlk/09.wav:True,menuConfirm:../extract_wlk/04.wav:True; turnAutoSource=battle-turn-prototype; skillObjective=후보 전투 기술 완료 btl_a1; skillObjectiveAction=battle-skill-completion-notice; skillObjectiveActiveId=battle-skill-complete:map1_01a; skillNoticeFeedback=battle-skill-completion-notice-feedback:전투 기술 완료 1/1; skillNoticeFeedbackRender=True; skillNoticeSound=menuConfirm:../extract_wlk/04.wav:True; skillTitleContinue=후보 전투 기술 완료 btl_a1/battle-skill-completion-notice/battle-skill-complete:map1_01a; noMP=1/2 enemy 700->700; noMPFeedback=battle-skill-no-mp:Ataho:돌려차기:돌려차기 MP 부족; noMPFeedbackRender=True; noMPFeedbackSound=menuConfirm:../extract_wlk/04.wav:True; 약초 3->2; itemAutoSource=item-use-prototype; itemTextTable=items itemTextRef=0x0048b984 itemTextVa=0x0048ba7c; itemFeedback=battle-item-use:herb:HP +20,battle-item-completion-notice-feedback:herb:전투 도구 완료 1/1; itemFeedbackRender=True; itemFeedbackSound=item:../extract_wlk/11.wav:True,menuConfirm:../extract_wlk/04.wav:True; itemObjective=후보 전투 도구 완료 btl_a1; itemObjectiveAction=battle-item-completion-notice; itemObjectiveActiveId=battle-item-complete:map1_01a; itemTitleContinue=후보 전투 도구 완료 btl_a1/battle-item-completion-notice/battle-item-complete:map1_01a; next=Rinshan; menuPotion=0; menuAutoSource=item-use-prototype; menuItemTextRef=0x0048b99c; menuItemFeedback=battle-item-use:mp_recovery:MP +50,battle-item-completion-notice-feedback:mp_recovery:전투 도구 완료 1/1; menuItemFeedbackRender=True; menuItemFeedbackSound=item:../extract_wlk/11.wav:True,menuConfirm:../extract_wlk/04.wav:True; menuObjective=후보 전투 도구 완료 btl_a1; menuObjectiveAction=battle-item-completion-notice; menuObjectiveActiveId=battle-item-complete:map1_01a; antidote=['poison']->[]; statusItemTextRef=0x0048b98c; statusItemFeedback=battle-item-use:item_2:독 회복,battle-item-completion-notice-feedback:item_2:전투 도구 완료 1/1; statusItemFeedbackRender=True; statusItemFeedbackSound=item:../extract_wlk/11.wav:True,menuConfirm:../extract_wlk/04.wav:True; statusObjective=후보 전투 도구 완료 btl_a1; statusObjectiveAction=battle-item-completion-notice; statusObjectiveActiveId=battle-item-complete:map1_01a; revive=Smashu 999/999; reviveItemTextRef=0x0048b9ac; reviveItemFeedback=battle-item-use:item_6:부활,battle-item-completion-notice-feedback:item_6:전투 도구 완료 1/1; reviveItemFeedbackRender=True; reviveItemFeedbackSound=item:../extract_wlk/11.wav:True,menuConfirm:../extract_wlk/04.wav:True; reviveObjective=후보 전투 도구 완료 btl_a1; reviveObjectiveAction=battle-item-completion-notice; reviveObjectiveActiveId=battle-item-complete:map1_01a","savedatMenuItem":"count 3->2; itemAutoSource=item-use-prototype; itemTextRef=0x0048b984; inventoryFeedback=inventory-item-use:herb:약초 HP +30,inventory-item-completion-notice-feedback:herb:도구 사용 완료 1/1; inventoryFeedbackRender=True; inventoryFeedbackSound=item:../extract_wlk/11.wav:True,menuConfirm:../extract_wlk/04.wav:True; itemObjective=후보 도구 완료 map1_01a; itemObjectiveAction=item-use-completion-notice; itemObjectiveActiveId=item-use-complete:map1_01a; antidote=['poison', 'paralysis']->[]; statusSave=['poison']->['poison']; savedHp=999; loadedHp=999; titleContinue=True; titleCount=2; titleHp=999; titleStatus=['poison']; titleObjective=후보 도구 완료 map1_01a; titleObjectiveAction=item-use-completion-notice; titleObjectiveActiveId=item-use-complete:map1_01a","savePointCandidate":"save-point-candidates:map1_01a scope=global-review count=6 runtime=False line=세이브 후보 map1_01a: 6개 (전체 후보 검토)","candidateSavePoint":"save-point-candidates:map2_07e scope=current-map count=1 saved=True payloadMap=map2_07e blockIds=event-dialogue-block-033","eventObjectPreview":"map2_03l candidates=3 loaded=3 rendered=3 assets=zm_2,zg_kni,zs_rg events=True","savedatUrl":"savedat2.dat selector 1:0 map=map2_02d status=not-current-selector","savedatUrlZip":"SAVEDATA/savedat_zip.dat entries=1 selector=2:0 status=synthetic-selector-evidence hud=save savedat_zip_probe.zip::savedat_zip....; zip savedat_zip.dat 1 entry synthetic-se...; tile 34,19 money 0; save maps 11 maps 11 in-bounds current m...; route 2:0 map1_01a->map2_02d; route missing real captured save, not sy...; gate e2/e4 0x00/0x00 order 0 flag 1; Ataho Lv1","savedatScan":"loaded=True; map=map1_01a; selected=savedat8.zip::SAVEDATA/savedat_zip.dat; selector=2:0; syntheticLocalProbe=True; found=2","savedatDrop":"synthetic_drop_savedat2.dat selector=2:0 status=synthetic-selector-evidence enter=True over=True dropActive=False real=False synthetic=True","syntheticSelector20":"map=map1_01a selector=2:0 status=synthetic-selector-evidence","savedatZip":"SAVEDATA/savedat_zip.dat entries=1 selector=2:0 status=synthetic-selector-evidence hud=save synthetic_savedat_bundle.zip::saved...; zip savedat_zip.dat 1 entry synthetic-se...; tile 34,19 money 0; save maps 11 maps 11 in-bounds current m...; route 2:0 map1_01a->map2_02d; route missing real captured save, not sy...; gate e2/e4 0x00/0x00 order 0 flag 1; Ataho Lv1","syntheticQuickSaveLoad":"save=synthetic-selector-evidence load=synthetic-selector-evidence real=False synthetic=True","routeAssist":"auto top edge 0 move spawn 47,47; 1297488708->1273728938; ?map=map2_02d&trialTransitions=routeAssist&startTile=47%2C46&moveMs=80&_=1781070567835403370","routeContinue":"target=map2_18d; 2047288192->648305918; ?map=map2_18d&trialTransitions=routeAssist&startTile=47%2C47&moveMs=80&_=1781070567835403370&focusTile=46%2C0&collision=1&overview=1"},"sourceFile":"out/mobile_browser_controls_smoke.json","snapshots":{"count":72,"totalSizeBytes":2383001,"largest":[{"key":"savePointCandidateMenu","type":"dict","sizeBytes":534676},{"key":"savedatBattleSkill","type":"dict","sizeBytes":219305},{"key":"candidateSavePointMenu","type":"dict","sizeBytes":216510},{"key":"savedatBattleReviveItem","type":"dict","sizeBytes":215140},{"key":"savedatBattleStatusItem","type":"dict","sizeBytes":194556},{"key":"savedatBattleItemMenu","type":"dict","sizeBytes":169810},{"key":"savedatBattleItem","type":"dict","sizeBytes":168531},{"key":"dialogueAdvanced","type":"dict","sizeBytes":128033},{"key":"dialogueOpen","type":"dict","sizeBytes":127853},{"key":"battleQuickSave","type":"dict","sizeBytes":117321},{"key":"battleAfterState","type":"dict","sizeBytes":80501},{"key":"savedatBattleSkillTitleContinue","type":"dict","sizeBytes":51415},{"key":"savedatMenuItem","type":"dict","sizeBytes":42741},{"key":"savedatBattleItemTitleContinue","type":"dict","sizeBytes":41420},{"key":"savedatMenuTitleContinue","type":"dict","sizeBytes":14019},{"key":"savedatScan","type":"dict","sizeBytes":8115},{"key":"battleParty","type":"dict","sizeBytes":4678},{"key":"savedatBattleSkillNoMp","type":"dict","sizeBytes":4517},{"key":"syntheticSavedat","type":"dict","sizeBytes":4337},{"key":"savedatBattle","type":"dict","sizeBytes":3834}],"keys":["battleAfterState","battleButton","battleExit","battleFinish","battleParty","battleQuickLoad","battleQuickSave","candidateSavePointMenu","candidateSavePointStart","canvas","dialogueAdvanced","dialogueButton","dialogueOpen","dialogueReady","document","eventObjectPreview","manualPartyQuickLoad","manualPartyQuickSave","mapFilter","mobileMenuButton","overviewButton","postFrontier","routeContinueState","routeGoalAfter","routeGoalBefore","routeGoalBlockerAfter","routeGoalBlockerClick","routeGoalCandidateAfter","routeGoalCandidateClick","routeGoalClick","routeGoalFinishAfter","routeGoalFinishClick","routeGoalTargetAfter","routeGoalTargetClick","routeReturnBefore","routeReturnFocusAfter","routeReturnFocusClick","routeReturnTargetAfter","routeReturnTargetClick","routeReview","routeSummary","savePointCandidateMenu","savePointCandidateStart","savedatBattle","savedatBattleItem","savedatBattleItemMenu","savedatBattleItemTitleContinue","savedatBattleItemTitleContinueStart","savedatBattlePartySkillExec","savedatBattlePartySkills","savedatBattleReviveItem","savedatBattleSkill","savedatBattleSkillNoMp","savedatBattleSkillTitleContinue","savedatBattleSkillTitleContinueStart","savedatBattleStatusItem","savedatMenu","savedatMenuItem","savedatMenuQuickLoad","savedatMenuQuickSave","savedatMenuStatusItem","savedatMenuTitleContinue","savedatMenuTitleContinueStart","savedatScan","savedatScanHud","savedatUrl","savedatUrlZip","sounds","syntheticQuickLoad","syntheticQuickSave","syntheticSavedat","syntheticSavedatZip"]}},"lastRecordedSourceSizeBytes":2396652,"removedRawSizeBytes":2396652,"rawFilePresent":false,"rawRegeneration":"Run tools/verify_mobile_browser_controls.py locally to regenerate the ignored raw smoke when debugging browser regressions."}