{
  "kind": "hwanse-hud-menu-mode-state-dispatcher-review",
  "source": "tools/build_hud_menu_mode_state_dispatcher_review.py",
  "status": "menu-internal-dispatcher-grounded-opener-pending",
  "summary": {
    "knownDispatcherRows": 10,
    "confirmedInternalRows": 10,
    "inputMenuStateIntersectionCount": 6,
    "inputTopMenuOrAddDescriptorIntersectionCount": 0,
    "menuInternalDispatcherProven": true,
    "normalFieldEscOpenerProven": false,
    "decision": "0x0041d61b 및 0x0040b49e..0x0040b752 계열은 메뉴가 이미 열린 뒤의 cursor/selector/mode-state dispatcher로 분류된다. 이 층은 입력, cursor globals, selector table을 강하게 참조하지만 top-menu object sequence 생성이나 descriptor-add 호출과 연결되지 않으므로 normal-field ESC/X opener 증거가 아니다."
  },
  "dispatcherRows": [
    {
      "functionVa": 4239675,
      "functionVaHex": "0x0040b13b",
      "requestedVaHex": "0x0040b13b",
      "endVaHex": "0x0040b2c5",
      "size": 394,
      "label": "directional input dispatch to cursor helper",
      "promotion": "confirmed-menu-internal-not-opener",
      "decision": "input edge 방향 bit를 해석해 0x410570 cursor helper로 넘기는 방향키 처리층이다. descriptor/materializer 근거가 없어 opener가 아니다.",
      "refHits": {
        "input.edgeActionMask": [
          "0x0040b167",
          "0x0040b189",
          "0x0040b1b3",
          "0x0040b1d5",
          "0x0040b1ff",
          "0x0040b221",
          "0x0040b246",
          "0x0040b26b"
        ]
      },
      "callHits": {
        "call.menuCursorApply": [
          "0x0040b17d",
          "0x0040b1a2",
          "0x0040b1c9",
          "0x0040b1ee",
          "0x0040b215",
          "0x0040b23a",
          "0x0040b25f",
          "0x0040b284"
        ]
      }
    },
    {
      "functionVa": 4240542,
      "functionVaHex": "0x0040b49e",
      "requestedVaHex": "0x0040b49e",
      "endVaHex": "0x0040b4e6",
      "size": 72,
      "label": "availability table builder",
      "promotion": "confirmed-selector-state-layer",
      "decision": "0x59e360/0x59e370 enabled table을 준비하는 selector availability producer다.",
      "refHits": {
        "runtime.enabledTableA": [
          "0x0040b4af"
        ],
        "runtime.enabledTableB": [
          "0x0040b4b4"
        ]
      },
      "callHits": {
        "call.availabilityBuilder": [
          "0x0040b4d2"
        ]
      }
    },
    {
      "functionVa": 4240614,
      "functionVaHex": "0x0040b4e6",
      "requestedVaHex": "0x0040b4e6",
      "endVaHex": "0x0040b55f",
      "size": 121,
      "label": "availability branch consumer",
      "promotion": "confirmed-selector-state-layer",
      "decision": "object+0xa8 selector와 enabled table 값을 비교해 분기한다.",
      "refHits": {
        "runtime.enabledTableA": [
          "0x0040b505"
        ],
        "runtime.enabledTableB": [
          "0x0040b511"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4240735,
      "functionVaHex": "0x0040b55f",
      "requestedVaHex": "0x0040b55f",
      "endVaHex": "0x0040b696",
      "size": 311,
      "label": "next enabled row producer",
      "promotion": "confirmed-selector-state-layer",
      "decision": "enabled table에서 다음 선택 가능 row를 찾고 object+0xa8 slot에 쓴다.",
      "refHits": {
        "runtime.enabledTableA": [
          "0x0040b57e"
        ],
        "runtime.enabledTableB": [
          "0x0040b58a"
        ],
        "descriptor.persistFlag": [
          "0x0040b591"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4241046,
      "functionVaHex": "0x0040b696",
      "requestedVaHex": "0x0040b696",
      "endVaHex": "0x0040b752",
      "size": 188,
      "label": "active descriptor row selector producer",
      "promotion": "confirmed-selector-state-layer",
      "decision": "active descriptor row의 +0x48/+0x4a 값을 비교해 menu selector slot을 만든다.",
      "refHits": {
        "runtime.currentDescriptorIndex": [
          "0x0040b6a2"
        ],
        "runtime.activeComparisonGroup": [
          "0x0040b6f5",
          "0x0040b70d"
        ],
        "descriptor.activeOrder": [
          "0x0040b6aa"
        ],
        "descriptor.rowTable": [
          "0x0040b6b8"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4241234,
      "functionVaHex": "0x0040b752",
      "requestedVaHex": "0x0040b752",
      "endVaHex": "0x0040b84a",
      "size": 248,
      "label": "persistent menu category/cursor load-save",
      "promotion": "confirmed-selector-state-layer",
      "decision": "active descriptor row와 0x59e340/0x59e34a 사이에 menu category/cursor 상태를 load/save하는 persistent state handler다.",
      "refHits": {
        "runtime.menuCategory": [
          "0x0040b79a",
          "0x0040b7c6",
          "0x0040b7d8"
        ],
        "runtime.menuCursor": [
          "0x0040b7bb",
          "0x0040b7cd",
          "0x0040b7fa"
        ],
        "runtime.currentDescriptorIndex": [
          "0x0040b780",
          "0x0040b7a1",
          "0x0040b7e0",
          "0x0040b802"
        ],
        "descriptor.activeOrder": [
          "0x0040b788",
          "0x0040b7a9",
          "0x0040b7e8",
          "0x0040b80a"
        ],
        "descriptor.persistFlag": [
          "0x0040b771"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4261232,
      "functionVaHex": "0x00410570",
      "requestedVaHex": "0x00410570",
      "endVaHex": "0x004106ba",
      "size": 330,
      "label": "cursor apply/helper",
      "promotion": "confirmed-helper",
      "decision": "cursor movement helper로, 선택 buffer/object state를 갱신한다.",
      "refHits": {
        "input.currentActionMask": [
          "0x004106a8"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4261562,
      "functionVaHex": "0x004106ba",
      "requestedVaHex": "0x004106ba",
      "endVaHex": "0x0041082f",
      "size": 373,
      "label": "cursor motion/sound helper",
      "promotion": "confirmed-helper",
      "decision": "0x59db5a/5b/5c/5e cursor globals를 소비하는 menu cursor motion 계층이다.",
      "refHits": {
        "menu.cursorMax": [
          "0x00410794"
        ],
        "menu.cursorMode": [
          "0x004106c6"
        ],
        "menu.cursorSourceOffset": [
          "0x0041071a",
          "0x00410749",
          "0x0041079c",
          "0x004107b5",
          "0x004107e4"
        ],
        "menu.cursorYBase": [
          "0x0041073c",
          "0x004107d7"
        ],
        "menu.cursorY": [
          "0x00410771",
          "0x0041080c"
        ]
      },
      "callHits": {}
    },
    {
      "functionVa": 4314651,
      "functionVaHex": "0x0041d61b",
      "requestedVaHex": "0x0041d61b",
      "endVaHex": "0x0041d888",
      "size": 621,
      "label": "menu-internal input dispatcher",
      "promotion": "confirmed-menu-internal-not-opener",
      "decision": "edge mask를 읽고 이미 존재하는 menu object의 cursor/confirm/cancel 상태를 처리한다. 0x55b128 latch, 0x59db58..0x59db5e cursor globals, 0x59dd6c sound handle, 0x4106ba cursor motion helper, 0x42af73 sound cue를 함께 쓰지만 top-menu object sequence나 descriptor-add 호출은 없다.",
      "refHits": {
        "input.edgeActionMask": [
          "0x0041d6ff",
          "0x0041d70a",
          "0x0041d712",
          "0x0041d71b",
          "0x0041d723",
          "0x0041d797",
          "0x0041d7b2",
          "0x0041d807",
          "0x0041d812",
          "0x0041d82e",
          "0x0041d851",
          "0x0041d85c"
        ],
        "menu.dispatchLatch": [
          "0x0041d623",
          "0x0041d6f3",
          "0x0041d822",
          "0x0041d86c"
        ],
        "menu.dispatchStopFlag": [
          "0x0041d87b"
        ],
        "menu.cursorMax": [
          "0x0041d743"
        ],
        "menu.cursorMode": [
          "0x0041d749"
        ],
        "menu.cursorSourceOffset": [
          "0x0041d75b"
        ],
        "menu.cursorYBase": [
          "0x0041d76a"
        ],
        "menu.cursorY": [
          "0x0041d78f"
        ],
        "menu.soundHandle": [
          "0x0041d7e4",
          "0x0041d849"
        ]
      },
      "callHits": {
        "call.menuCursorMotion": [
          "0x0041d7a6"
        ],
        "call.soundCue": [
          "0x0041d7da",
          "0x0041d83f"
        ]
      }
    },
    {
      "functionVa": 4315293,
      "functionVaHex": "0x0041d89d",
      "requestedVaHex": "0x0041d89d",
      "endVaHex": "0x0041d962",
      "size": 197,
      "label": "display VM selector base binder",
      "promotion": "confirmed-base-binder-not-opener",
      "decision": "display/object VM의 base pointer를 고르는 binder다. opener 증거로 쓰면 안 된다.",
      "refHits": {
        "input.currentActionMask": [
          "0x0041d8c5"
        ],
        "descriptor.rowTable": [
          "0x0041d8f8"
        ],
        "descriptor.statusBase": [
          "0x0041d8d7"
        ]
      },
      "callHits": {}
    }
  ],
  "inputMenuStateIntersections": [
    {
      "functionVaHex": "0x0040c6cc",
      "endVaHex": "0x0040c948",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.edgeActionMask": [
          "0x0040c746",
          "0x0040c757",
          "0x0040c762"
        ],
        "runtime.currentDescriptorIndex": [
          "0x0040c6eb",
          "0x0040c778",
          "0x0040c78c",
          "0x0040c79a",
          "0x0040c7a1",
          "0x0040c7c7",
          "0x0040c7e4",
          "0x0040c81c",
          "0x0040c839",
          "0x0040c875",
          "0x0040c883",
          "0x0040c89d",
          "0x0040c8a9",
          "0x0040c8b0",
          "0x0040c8c7",
          "0x0040c8e4"
        ]
      },
      "callHits": {}
    },
    {
      "functionVaHex": "0x0041b82a",
      "endVaHex": "0x0041b8ee",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.edgeActionMask": [
          "0x0041b84c"
        ],
        "menu.dispatchStopFlag": [
          "0x0041b864",
          "0x0041b8a2",
          "0x0041b8dc"
        ]
      },
      "callHits": {}
    },
    {
      "functionVaHex": "0x0041b8ee",
      "endVaHex": "0x0041b956",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.edgeActionMask": [
          "0x0041b907",
          "0x0041b924"
        ],
        "menu.dispatchStopFlag": [
          "0x0041b944"
        ]
      },
      "callHits": {}
    },
    {
      "functionVaHex": "0x0041d61b",
      "endVaHex": "0x0041d888",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.edgeActionMask": [
          "0x0041d6ff",
          "0x0041d70a",
          "0x0041d712",
          "0x0041d71b",
          "0x0041d723",
          "0x0041d797",
          "0x0041d7b2",
          "0x0041d807",
          "0x0041d812",
          "0x0041d82e",
          "0x0041d851",
          "0x0041d85c"
        ],
        "menu.dispatchLatch": [
          "0x0041d623",
          "0x0041d6f3",
          "0x0041d822",
          "0x0041d86c"
        ],
        "menu.dispatchStopFlag": [
          "0x0041d87b"
        ],
        "menu.cursorMax": [
          "0x0041d743"
        ],
        "menu.cursorMode": [
          "0x0041d749"
        ],
        "menu.cursorSourceOffset": [
          "0x0041d75b"
        ],
        "menu.cursorYBase": [
          "0x0041d76a"
        ],
        "menu.cursorY": [
          "0x0041d78f"
        ],
        "menu.soundHandle": [
          "0x0041d7e4",
          "0x0041d849"
        ]
      },
      "callHits": {
        "call.menuCursorMotion": [
          "0x0041d7a6"
        ],
        "call.soundCue": [
          "0x0041d7da",
          "0x0041d83f"
        ]
      }
    },
    {
      "functionVaHex": "0x0041d89d",
      "endVaHex": "0x0041d962",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.currentActionMask": [
          "0x0041d8c5"
        ],
        "descriptor.rowTable": [
          "0x0041d8f8"
        ],
        "descriptor.statusBase": [
          "0x0041d8d7"
        ]
      },
      "callHits": {}
    },
    {
      "functionVaHex": "0x0041f073",
      "endVaHex": "0x0041f329",
      "inputHit": true,
      "menuStateHit": true,
      "topMenuHit": false,
      "descriptorAddCallHit": false,
      "refHits": {
        "input.edgeActionMask": [
          "0x0041f092",
          "0x0041f0c6"
        ],
        "menu.dispatchStopFlag": [
          "0x0041f1d7",
          "0x0041f317"
        ]
      },
      "callHits": {}
    }
  ],
  "openerLikeIntersections": [],
  "refsByName": {
    "input.currentActionMask": [
      "0x0040640b",
      "0x004106a8",
      "0x0041d8c5",
      "0x00422d9b",
      "0x00422da1",
      "0x004232a5",
      "0x004232dc",
      "0x0043038e",
      "0x0043039e",
      "0x004303ae",
      "0x004303b7",
      "0x004303bf",
      "0x004303c8",
      "0x004303d0",
      "0x004303e0",
      "0x004303f0",
      "0x004303f9",
      "0x00430401",
      "0x0043040a",
      "0x00430412",
      "0x00430429",
      "0x00430440",
      "0x00430457",
      "0x004304df",
      "0x004304fe",
      "0x00430660",
      "0x0043067f",
      "0x00430806",
      "0x00430825",
      "0x004309c8",
      "0x004309e7"
    ],
    "input.edgeActionMask": [
      "0x004042dd",
      "0x00404340",
      "0x0040b167",
      "0x0040b189",
      "0x0040b1b3",
      "0x0040b1d5",
      "0x0040b1ff",
      "0x0040b221",
      "0x0040b246",
      "0x0040b26b",
      "0x0040c746",
      "0x0040c757",
      "0x0040c762",
      "0x0041b84c",
      "0x0041b907",
      "0x0041b924",
      "0x0041d6ff",
      "0x0041d70a",
      "0x0041d712",
      "0x0041d71b",
      "0x0041d723",
      "0x0041d797",
      "0x0041d7b2",
      "0x0041d807",
      "0x0041d812",
      "0x0041d82e",
      "0x0041d851",
      "0x0041d85c",
      "0x0041f092",
      "0x0041f0c6",
      "0x00422d8b",
      "0x00422daf",
      "0x00422dc0"
    ],
    "runtime.enabledTableA": [
      "0x0040b4af",
      "0x0040b505",
      "0x0040b57e",
      "0x00410a6b",
      "0x00410ad6"
    ],
    "runtime.enabledTableB": [
      "0x0040b38e",
      "0x0040b459",
      "0x0040b4b4",
      "0x0040b511",
      "0x0040b58a",
      "0x00410998",
      "0x00410a03",
      "0x0041dccc",
      "0x0041ddb4",
      "0x0041ddf2",
      "0x0041de7d",
      "0x0041ded3",
      "0x0041df2d",
      "0x0041e0f2",
      "0x0041e1d8",
      "0x0041e1e7",
      "0x0041e1f6",
      "0x0041e390",
      "0x0041e431",
      "0x0041fb36",
      "0x0041fb57"
    ],
    "runtime.menuCategory": [
      "0x0040b79a",
      "0x0040b7c6",
      "0x0040b7d8",
      "0x0041fc96",
      "0x004332ab"
    ],
    "runtime.menuCursor": [
      "0x0040b7bb",
      "0x0040b7cd",
      "0x0040b7fa",
      "0x0040f705",
      "0x0040f745",
      "0x0040fcfa",
      "0x0040fd1b",
      "0x0040fd62",
      "0x0040fda2",
      "0x0040fdf7",
      "0x0040fe16",
      "0x0040fee0",
      "0x0040fefa",
      "0x0040ff12",
      "0x0040ff35",
      "0x0040ff7c",
      "0x0040ffa5",
      "0x0041001d",
      "0x0041e7cc",
      "0x0041e7f2",
      "0x0041e810",
      "0x0041e822",
      "0x0041fb79",
      "0x0041fbb6",
      "0x0041fbd0",
      "0x0041fbf5",
      "0x0041fc1a",
      "0x0041fcbe",
      "0x0041fcf9",
      "0x0041fd34",
      "0x0041fd56",
      "0x0041fd78",
      "0x0041fdaa",
      "0x00420096",
      "0x004200c4",
      "0x0042055d",
      "0x00420569",
      "0x004332d3",
      "0x00433305",
      "0x00433337",
      "0x00433357",
      "0x0043337e",
      "0x004333aa"
    ],
    "runtime.currentDescriptorIndex": [
      "0x0040b6a2",
      "0x0040b780",
      "0x0040b7a1",
      "0x0040b7e0",
      "0x0040b802",
      "0x0040c53b",
      "0x0040c599",
      "0x0040c6eb",
      "0x0040c778",
      "0x0040c78c",
      "0x0040c79a",
      "0x0040c7a1",
      "0x0040c7c7",
      "0x0040c7e4",
      "0x0040c81c",
      "0x0040c839",
      "0x0040c875",
      "0x0040c883",
      "0x0040c89d",
      "0x0040c8a9",
      "0x0040c8b0",
      "0x0040c8c7",
      "0x0040c8e4",
      "0x0040f588",
      "0x0040f5b6",
      "0x0040f688",
      "0x0040f8aa",
      "0x0040f8f2",
      "0x0040faac",
      "0x0040fb1d",
      "0x0040fb4e",
      "0x0040fb88",
      "0x0040fba4",
      "0x0040fbba",
      "0x0040fbd1",
      "0x0040fbed",
      "0x0040fc03",
      "0x00410e69",
      "0x00410eb7",
      "0x00410fed",
      "0x00411219",
      "0x0041d96e",
      "0x0041dc3f",
      "0x0041dc79",
      "0x0041dd69",
      "0x0041de28",
      "0x0041de4b",
      "0x0041de5f",
      "0x0041e343",
      "0x0041e5d8",
      "0x0041e748",
      "0x0041e7a5",
      "0x0041e87d",
      "0x0041f887",
      "0x0041fca5",
      "0x0041fce0",
      "0x0041fd1b",
      "0x0041fd91",
      "0x0041ff5d",
      "0x00420067",
      "0x004204de",
      "0x00420513"
    ],
    "runtime.activeComparisonGroup": [
      "0x0040b6f5",
      "0x0040b70d",
      "0x0040f70f",
      "0x00411006",
      "0x0041e35c",
      "0x0041e43e",
      "0x0041e7be",
      "0x00420087"
    ],
    "menu.dispatchLatch": [
      "0x0041d623",
      "0x0041d6f3",
      "0x0041d822",
      "0x0041d86c"
    ],
    "menu.dispatchStopFlag": [
      "0x0041b675",
      "0x0041b689",
      "0x0041b73a",
      "0x0041b864",
      "0x0041b8a2",
      "0x0041b8dc",
      "0x0041b944",
      "0x0041bdf3",
      "0x0041d5e8",
      "0x0041d87b",
      "0x0041ed52",
      "0x0041ed82",
      "0x0041eee3",
      "0x0041ef13",
      "0x0041f1d7",
      "0x0041f317"
    ],
    "menu.cursorMax": [
      "0x00410794",
      "0x0041d743"
    ],
    "menu.cursorMode": [
      "0x004106c6",
      "0x0041d749"
    ],
    "menu.cursorSourceOffset": [
      "0x0041071a",
      "0x00410749",
      "0x0041079c",
      "0x004107b5",
      "0x004107e4",
      "0x0041d75b"
    ],
    "menu.cursorYBase": [
      "0x0041073c",
      "0x004107d7",
      "0x0041d76a"
    ],
    "menu.cursorY": [
      "0x00410771",
      "0x0041080c",
      "0x0041d78f"
    ],
    "menu.soundHandle": [
      "0x0040465f",
      "0x00404667",
      "0x0040468c",
      "0x00404807",
      "0x00404884",
      "0x00404f94",
      "0x00404fff",
      "0x00405037",
      "0x004053e2",
      "0x004053ea",
      "0x004054a1",
      "0x00405567",
      "0x0040556f",
      "0x004055af",
      "0x004055b7",
      "0x0040ef53",
      "0x0040ef5b",
      "0x0040f00c",
      "0x0040f014",
      "0x0041d7e4",
      "0x0041d849",
      "0x0041eb4d",
      "0x0041eb79",
      "0x0041ebff",
      "0x0041eda8",
      "0x0041ee14",
      "0x0041ee8f"
    ],
    "descriptor.activeOrder": [
      "0x0040b6aa",
      "0x0040b788",
      "0x0040b7a9",
      "0x0040b7e8",
      "0x0040b80a",
      "0x0040bd4b",
      "0x0040be7e",
      "0x0040bfa7",
      "0x0040c3c7",
      "0x0040deb8",
      "0x00410e71",
      "0x00410ff5",
      "0x0041d974",
      "0x0041dc47",
      "0x0041dc81",
      "0x0041e34b",
      "0x0041e750",
      "0x0041e7ad",
      "0x0041e982",
      "0x0041f88f",
      "0x0041fcad",
      "0x0041fce8",
      "0x0041fd23",
      "0x0041fd99",
      "0x0041ff65",
      "0x0042006f",
      "0x004217a0",
      "0x00432169",
      "0x00432663",
      "0x004326a5"
    ],
    "descriptor.rowTable": [
      "0x00406436",
      "0x0040ad79",
      "0x0040b6b8",
      "0x0040be8c",
      "0x0040c3d5",
      "0x0040c43b",
      "0x0040c499",
      "0x0040dec6",
      "0x0040f25a",
      "0x0040f373",
      "0x0040f48c",
      "0x0040f730",
      "0x0040fac6",
      "0x0040ff57",
      "0x0041015b",
      "0x00410162",
      "0x004101a6",
      "0x004101ad",
      "0x004103e7",
      "0x0041d8f8",
      "0x0042007d",
      "0x004217ae",
      "0x00422562",
      "0x00422a5c",
      "0x00423428",
      "0x00423561",
      "0x004320b2",
      "0x0043217c",
      "0x004321d0",
      "0x004321f3",
      "0x0043228e",
      "0x004323b3",
      "0x004323e0",
      "0x00432403",
      "0x0043249e",
      "0x0043259b",
      "0x00432722",
      "0x00432745",
      "0x004327e0"
    ],
    "descriptor.persistFlag": [
      "0x0040b591",
      "0x0040b771",
      "0x0040b877",
      "0x00411308"
    ],
    "descriptor.statusBase": [
      "0x004064e4",
      "0x0041d8d7",
      "0x00422262",
      "0x00422272",
      "0x004233fc",
      "0x00423535"
    ],
    "topMenu.objectSequence": []
  },
  "callsByName": {
    "call.menuCursorApply": [
      "0x0040b17d",
      "0x0040b1a2",
      "0x0040b1c9",
      "0x0040b1ee",
      "0x0040b215",
      "0x0040b23a",
      "0x0040b25f",
      "0x0040b284"
    ],
    "call.menuCursorMotion": [
      "0x0041d7a6"
    ],
    "call.soundCue": [
      "0x00404655",
      "0x004053d8",
      "0x0040ef49",
      "0x0040f002",
      "0x0041d7da",
      "0x0041d83f",
      "0x0041eb43",
      "0x0042ad6b",
      "0x0042c7e2"
    ],
    "call.availabilityBuilder": [
      "0x0040b4d2"
    ],
    "call.addDescriptor": [
      "0x00407cd1"
    ]
  },
  "negativeEvidence": [
    "0x0041d61b reads input edge mask and menu cursor globals, but does not reference 0x004ddc6c and does not call 0x00431fe8.",
    "0x0040b49e..0x0040b752 selector handlers prepare/consume enabled tables and persistent cursor state, not menu object construction.",
    "The exact top-menu #6/#3/#4 construction sequence remains data-grounded at 0x004ddc84 with no input-consumer intersection."
  ],
  "nextFrontier": [
    "Trace the higher-level field mode/state transition that creates or attaches the top-menu descriptor before 0x0041d61b starts consuming cursor input.",
    "Search for producers of descriptor stack materialization or selected-root switch, not for cursor/confirm/cancel handlers.",
    "Promote only if a candidate connects input/state transition to the exact 0x004ddc6c top-menu object sequence or its descriptor attachment path."
  ]
}
