{"kind":"hwanse-field-encounter-producer-boundary-review","status":"producer-not-promoted","source":["out/field_encounter_static_review.json","out/field_step_encounter_boundary_review.json","out/field_rng_selector_opcode1c_review.json","out/field_encounter_formation_boundary_review.json","out/field_encounter_tick_route_boundary_review.json","out/field_encounter_formation_context_review.json","out/field_active_object_trigger_boundary_review.json","tools/build_field_encounter_producer_boundary_review.py"],"summary":{"surfaceCount":8,"groundedConsumerOrPrimitiveCount":7,"promotedProducerSurfaceCount":0,"fieldEncounterProducerPromoted":false,"fieldTickRouteProducerPromoted":false,"decision":"필드 인카운트에 필요한 일부 consumer/primitive는 확정됐지만, 걸음/지도 상태에서 전투 배경과 몬스터 편성을 선택하는 producer/root는 아직 정적으로 승격되지 않았다."},"surfaces":[{"surface":"field movement / collision","artifact":"field_step_encounter_boundary_review.json","promoted":false,"grounded":true,"finding":"actor controller와 collision helper까지는 확정됐지만 core movement 창에는 shared RNG 0건, battle CNS 0건, monster CNS 0건이다.","nextEvidence":"이동 좌표 갱신 이후 별도 field tick/event consumer가 battle setup을 호출하는 증거."},{"surface":"field tick/update route","artifact":"field_encounter_tick_route_boundary_review.json","promoted":false,"grounded":true,"finding":"known field windows 7개 안에서 key direct calls 1개, promotable key calls 0개다. shared RNG inside field windows 1개는 encounter class 0개다. formation stream exact refs 0개.","nextEvidence":"known field tick 밖의 higher-level mode/state dispatcher에서 step success 이후 battle setup으로 이어지는 증거."},{"surface":"shared RNG call classification","artifact":"field_encounter_static_review.json","promoted":false,"grounded":true,"finding":"shared RNG call site 51개는 대부분 전투 계산, 레벨업, scene random gate 등으로 분리됐다. nearby CNS가 붙은 RNG는 0개이고 direct field encounter evidence는 0개다.","nextEvidence":"지도/걸음/인카운트 카운터와 함께 쓰이는 아직 미분류 RNG call 또는 RNG 이전 producer."},{"surface":"opcode 0x1c random selector","artifact":"field_rng_selector_opcode1c_review.json","promoted":false,"grounded":true,"finding":"handler table entry와 RNG selector primitive는 확인됐다. 다만 well-formed command block은 0개이고, 현재 refs 3개는 모두 low-byte pointer artifact다.","nextEvidence":"실행 가능한 command stream 안에서 opcode 0x1c가 ctx+0x40 branch를 고르는 사례."},{"surface":"opcode 0x1e battle actor formation","artifact":"field_encounter_formation_boundary_review.json","promoted":false,"grounded":true,"finding":"opcode 0x1e / 0x0040c084는 enemy actor formation consumer로 확정됐다. selector roots 93개 중 map+monster root는 0개, all-three root는 0개다.","nextEvidence":"field/map producer가 0x1e stream 또는 equivalent battle setup stream을 선택하는 포인터/분기."},{"surface":"0x1e formation byte candidates","artifact":"field_encounter_formation_context_review.json","promoted":false,"grounded":false,"finding":"byte-shaped candidate 6개는 pointer refs 0개, scene hits 0개, next valid opcode 0개다. 따라서 현재는 search anchor일 뿐이다.","nextEvidence":"candidate 주변이 실제 VM stream임을 보이는 producer/root 또는 valid opcode chain."},{"surface":"battle/background resource descriptors","artifact":"field_encounter_static_review.json","promoted":false,"grounded":true,"finding":"btl resource descriptor와 enemy sprite descriptor는 리소스 로딩 근거다. resourceDescriptorsProveBattleEntry=False.","nextEvidence":"리소스 묶음이 실제 battle-entry/event setup으로 소비되는 caller/root."},{"surface":"manual active-object trigger bridge","artifact":"field_active_object_trigger_boundary_review.json","promoted":false,"grounded":true,"finding":"manual overlap/object +0xec bridge와 object script producer는 확인됐다. strict initializer 723개 중 route proof 0개, map CNS operand 0개, active 0x5e route proof 0개다.","nextEvidence":"수동 상호작용 bridge가 아니라 field tick/encounter check root에서 battle setup으로 이어지는 증거."}],"nextFrontier":["active object callback 밖의 field/event tick 루프에서 battle setup 호출자를 찾는다.","opcode 0x1c/0x1e가 같은 executable command stream에 들어가는 새 root boundary를 찾는다.","map family/resource descriptor와 monster formation을 한 root가 함께 참조하는지 재검토한다.","정적 higher-level mode/state dispatcher에서 walking step 완료와 battle setup을 연결하는 분기를 찾는다."]}