{
  "kind": "hwanse-global-mode-state-frontier-review",
  "source": "tools/build_global_mode_state_frontier_review.py",
  "status": "cross-domain-frontier-scanned-no-producer-promoted",
  "summary": {
    "touchedFunctionCount": 152,
    "crossDomainFunctionCount": 19,
    "reviewRequiredCount": 0,
    "promotedProducerCount": 0,
    "saveLoadRestoreBridgeFound": true,
    "saveLoadRestoreBridgeVaHex": "0x00423319",
    "menuInternalDispatcherExcluded": true,
    "fieldMovementControllerExcluded": true,
    "globalModeStateProducerPromoted": false,
    "promotionCounts": {
      "context-only": 8,
      "excluded-base-binder": 1,
      "excluded-cancel-back": 1,
      "excluded-generic-stack-helper": 3,
      "excluded-known-consumer": 1,
      "excluded-known-route-no-direct-producer": 1,
      "excluded-menu-internal": 1,
      "excluded-non-live-route": 1,
      "excluded-primitive": 1,
      "excluded-scene-random-gate": 1
    },
    "categoryComboCounts": {
      "encounter+menu": 4,
      "encounter+scene": 1,
      "field+input": 1,
      "field+input+menu": 1,
      "field+menu": 5,
      "input+menu": 3,
      "menu+scene": 4
    },
    "decision": "통합 교집합 스캔에서 새 live gameplay mode/state producer는 승격되지 않았다. 가장 강한 scene+menu 교집합인 0x00423319는 save/load restore 경로로 분리됐고, 0x0041d61b/0x0043022d/descriptor helpers/RNG primitive도 각각 내부 소비자 또는 generic helper로 배제된다."
  },
  "strictPromotionCriteria": [
    "A candidate must connect a live input/field/scene state transition to exact descriptor attachment, selected-root execution, battle formation/resource setup, or visible map-animation mutation.",
    "Save/load restoration, generic descriptor stack add/remove/rebuild, cursor movement, text/status rendering, and RNG primitives are support layers and do not promote by themselves.",
    "A single shared global such as descriptor count or selected-root is insufficient unless the caller/root shows live execution context."
  ],
  "crossDomainRows": [
    {
      "functionVa": 4226313,
      "functionVaHex": "0x00407d09",
      "endVaHex": "0x004081c3",
      "size": 1210,
      "categories": [
        "field",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00407d24",
          "category": "menu"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00407dd5",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00407e4a",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "cross-domain-context",
      "promotion": "context-only",
      "reason": "Multiple categories meet, but strict producer/root conditions are not satisfied."
    },
    {
      "functionVa": 4228219,
      "functionVaHex": "0x0040847b",
      "endVaHex": "0x00408767",
      "size": 748,
      "categories": [
        "field",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040849d",
          "category": "menu"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00408554",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "cross-domain-context",
      "promotion": "context-only",
      "reason": "Multiple categories meet, but strict producer/root conditions are not satisfied."
    },
    {
      "functionVa": 4228967,
      "functionVaHex": "0x00408767",
      "endVaHex": "0x00408a11",
      "size": 682,
      "categories": [
        "field",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00408782",
          "category": "menu"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00408855",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x004088d8",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "cross-domain-context",
      "promotion": "context-only",
      "reason": "Multiple categories meet, but strict producer/root conditions are not satisfied."
    },
    {
      "functionVa": 4230416,
      "functionVaHex": "0x00408d10",
      "endVaHex": "0x00408eac",
      "size": 412,
      "categories": [
        "field",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00408d2b",
          "category": "menu"
        },
        {
          "name": "field.liveLayer0Grid",
          "vaHex": "0x00408de1",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00408e36",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00408dbc",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00408e11",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "cross-domain-context",
      "promotion": "context-only",
      "reason": "Multiple categories meet, but strict producer/root conditions are not satisfied."
    },
    {
      "functionVa": 4230828,
      "functionVaHex": "0x00408eac",
      "endVaHex": "0x0040904a",
      "size": 414,
      "categories": [
        "field",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00408ec7",
          "category": "menu"
        },
        {
          "name": "field.liveLayer0Grid",
          "vaHex": "0x00408f75",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00408fea",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00408f4e",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00408fc3",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "cross-domain-context",
      "promotion": "context-only",
      "reason": "Multiple categories meet, but strict producer/root conditions are not satisfied."
    },
    {
      "functionVa": 4242633,
      "functionVaHex": "0x0040bcc9",
      "endVaHex": "0x0040be38",
      "size": 367,
      "categories": [
        "encounter",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040bce8",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040bcf7",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040bd37",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040bd6b",
          "category": "menu"
        },
        {
          "name": "menu.descriptorOrder",
          "vaHex": "0x0040bd4b",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x0040bdcc",
          "category": "encounter"
        }
      ],
      "classification": "generic-vm-rng-selector",
      "promotion": "excluded-primitive",
      "reason": "generic random selector primitive using descriptor context; not field encounter routing by itself."
    },
    {
      "functionVa": 4245196,
      "functionVaHex": "0x0040c6cc",
      "endVaHex": "0x0040c948",
      "size": 636,
      "categories": [
        "input",
        "menu"
      ],
      "refs": [
        {
          "name": "input.edgeMask",
          "vaHex": "0x0040c746",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0040c757",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0040c762",
          "category": "input"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040c86c",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0040c8b8",
          "category": "menu"
        }
      ],
      "calls": [],
      "classification": "cancel-back-handler",
      "promotion": "excluded-cancel-back",
      "reason": "ESC/X edge handling that unwinds active descriptor state; this is cancel/back behavior, not normal opener or higher-level mode transition."
    },
    {
      "functionVa": 4265078,
      "functionVaHex": "0x00411476",
      "endVaHex": "0x0041157e",
      "size": 264,
      "categories": [
        "field",
        "input"
      ],
      "refs": [],
      "calls": [
        {
          "name": "input.pollDriver",
          "vaHex": "0x004114e2",
          "category": "input"
        },
        {
          "name": "field.activeObjectScriptRoute",
          "vaHex": "0x004114ec",
          "category": "field"
        }
      ],
      "classification": "field-tick-update-route",
      "promotion": "excluded-known-route-no-direct-producer",
      "reason": "per-frame field tick/update route; it calls update paths before redraw but has no direct live map-buffer mutation or encounter/menu/scene producer bridge."
    },
    {
      "functionVa": 4314651,
      "functionVaHex": "0x0041d61b",
      "endVaHex": "0x0041d888",
      "size": 621,
      "categories": [
        "input",
        "menu"
      ],
      "refs": [
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d6ff",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d70a",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d712",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d71b",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d723",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d797",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d7b2",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d807",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d812",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d82e",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d851",
          "category": "input"
        },
        {
          "name": "input.edgeMask",
          "vaHex": "0x0041d85c",
          "category": "input"
        },
        {
          "name": "menu.dispatchLatch",
          "vaHex": "0x0041d623",
          "category": "menu"
        },
        {
          "name": "menu.dispatchLatch",
          "vaHex": "0x0041d6f3",
          "category": "menu"
        },
        {
          "name": "menu.dispatchLatch",
          "vaHex": "0x0041d822",
          "category": "menu"
        },
        {
          "name": "menu.dispatchLatch",
          "vaHex": "0x0041d86c",
          "category": "menu"
        }
      ],
      "calls": [],
      "classification": "menu-internal-dispatcher",
      "promotion": "excluded-menu-internal",
      "reason": "confirmed cursor/confirm/cancel dispatcher after menu object construction."
    },
    {
      "functionVa": 4315293,
      "functionVaHex": "0x0041d89d",
      "endVaHex": "0x0041d962",
      "size": 197,
      "categories": [
        "input",
        "menu"
      ],
      "refs": [
        {
          "name": "input.currentMask",
          "vaHex": "0x0041d8c5",
          "category": "input"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x0041d8f8",
          "category": "menu"
        }
      ],
      "calls": [],
      "classification": "display-vm-base-binder",
      "promotion": "excluded-base-binder",
      "reason": "display/object VM base pointer binder, not descriptor attachment producer."
    },
    {
      "functionVa": 4331391,
      "functionVaHex": "0x0042177f",
      "endVaHex": "0x00421b33",
      "size": 948,
      "categories": [
        "encounter",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorOrder",
          "vaHex": "0x004217a0",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004217ae",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x004217da",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00421836",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00421892",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x004218da",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00421922",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x0042196a",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x004219a8",
          "category": "encounter"
        }
      ],
      "classification": "rng-descriptor-context-review",
      "promotion": "context-only",
      "reason": "RNG and descriptor state meet; previous scans usually classify these as generic VM/battle/status helpers unless field/map state is also present."
    },
    {
      "functionVa": 4338457,
      "functionVaHex": "0x00423319",
      "endVaHex": "0x004235df",
      "size": 710,
      "categories": [
        "menu",
        "scene"
      ],
      "refs": [
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x00423428",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x00423561",
          "category": "menu"
        },
        {
          "name": "scene.selectorA",
          "vaHex": "0x004234a4",
          "category": "scene"
        },
        {
          "name": "scene.selectorB",
          "vaHex": "0x004234b3",
          "category": "scene"
        },
        {
          "name": "scene.selectedRoot",
          "vaHex": "0x004234bb",
          "category": "scene"
        }
      ],
      "calls": [
        {
          "name": "menu.rebuildDescriptor",
          "vaHex": "0x0042349c",
          "category": "menu"
        }
      ],
      "classification": "save-load-state-restore",
      "promotion": "excluded-non-live-route",
      "reason": "loads/restores 0x4576d8 state block, 0x457750 descriptor block, 0x59db60 flags, then restores 0x59de30 from selector bytes. It proves save/load restoration, not live scene/menu/encounter routing."
    },
    {
      "functionVa": 4391469,
      "functionVaHex": "0x0043022d",
      "endVaHex": "0x004319f8",
      "size": 6091,
      "categories": [
        "field",
        "input",
        "menu"
      ],
      "refs": [
        {
          "name": "input.currentMask",
          "vaHex": "0x0043038e",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x0043039e",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303ae",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303b7",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303bf",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303c8",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303d0",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303e0",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303f0",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004303f9",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430401",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x0043040a",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430412",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430429",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430440",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430457",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004304df",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004304fe",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430660",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x0043067f",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430806",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x00430825",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004309c8",
          "category": "input"
        },
        {
          "name": "input.currentMask",
          "vaHex": "0x004309e7",
          "category": "input"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00430239",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043026a",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00431185",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043146f",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004319bc",
          "category": "menu"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430534",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430541",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x0043055e",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430574",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x004306b5",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x004306c2",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x004306df",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x004306f5",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x0043085b",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430868",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430885",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x0043089b",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430a1d",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430a2a",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430a47",
          "category": "field"
        },
        {
          "name": "field.liveLayer1Flags",
          "vaHex": "0x00430a5d",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x004304b1",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00430632",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x004307b2",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x004307ea",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00430958",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x0043099e",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00430f5d",
          "category": "field"
        },
        {
          "name": "field.mapWidth",
          "vaHex": "0x00431595",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430f0c",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430f28",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430f41",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430f69",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430f85",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00430fab",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x0043110b",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x004311da",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x00431822",
          "category": "field"
        },
        {
          "name": "field.viewX",
          "vaHex": "0x004318c6",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430e51",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430e79",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430e9f",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430ebb",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430ed7",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00430ef0",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00431130",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x0043120b",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x00431847",
          "category": "field"
        },
        {
          "name": "field.viewY",
          "vaHex": "0x004318eb",
          "category": "field"
        }
      ],
      "calls": [],
      "classification": "field-movement-controller",
      "promotion": "excluded-known-consumer",
      "reason": "input/current mask, descriptor count, collision flags, viewport refs meet in the movement/collision controller. It is already excluded as the menu opener and not a battle/scene producer."
    },
    {
      "functionVa": 4399080,
      "functionVaHex": "0x00431fe8",
      "endVaHex": "0x00432323",
      "size": 827,
      "categories": [
        "menu",
        "scene"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00431ff4",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432013",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432073",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432163",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432184",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432191",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432198",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004321b8",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004322a2",
          "category": "menu"
        },
        {
          "name": "menu.descriptorOrder",
          "vaHex": "0x00432169",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004320b2",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x0043217c",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004321d0",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004321f3",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x0043228e",
          "category": "menu"
        },
        {
          "name": "menu.rootTable",
          "vaHex": "0x004321bf",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "scene.textStatusConsumer",
          "vaHex": "0x004322f2",
          "category": "scene"
        }
      ],
      "classification": "descriptor-add-helper",
      "promotion": "excluded-generic-stack-helper",
      "reason": "generic descriptor stack add helper; it may call text/status consumer but is below the root producer."
    },
    {
      "functionVa": 4399907,
      "functionVaHex": "0x00432323",
      "endVaHex": "0x00432541",
      "size": 542,
      "categories": [
        "menu",
        "scene"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432385",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004323a5",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004323c8",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004324b2",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004323b3",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004323e0",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x00432403",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x0043249e",
          "category": "menu"
        },
        {
          "name": "menu.rootTable",
          "vaHex": "0x004323cf",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "scene.textStatusConsumer",
          "vaHex": "0x00432510",
          "category": "scene"
        }
      ],
      "classification": "descriptor-rebuild-helper",
      "promotion": "excluded-generic-stack-helper",
      "reason": "generic descriptor stack rebuild helper; useful support layer, not an opener/root selector."
    },
    {
      "functionVa": 4400449,
      "functionVaHex": "0x00432541",
      "endVaHex": "0x00432880",
      "size": 831,
      "categories": [
        "menu",
        "scene"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043254d",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043256b",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043264f",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00432685",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004326c4",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004326cb",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004326ea",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x0043270a",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004327f4",
          "category": "menu"
        },
        {
          "name": "menu.descriptorOrder",
          "vaHex": "0x00432663",
          "category": "menu"
        },
        {
          "name": "menu.descriptorOrder",
          "vaHex": "0x004326a5",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x0043259b",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x00432722",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x00432745",
          "category": "menu"
        },
        {
          "name": "menu.descriptorRows",
          "vaHex": "0x004327e0",
          "category": "menu"
        },
        {
          "name": "menu.rootTable",
          "vaHex": "0x00432711",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "scene.textStatusConsumer",
          "vaHex": "0x00432844",
          "category": "scene"
        }
      ],
      "classification": "descriptor-remove-helper",
      "promotion": "excluded-generic-stack-helper",
      "reason": "generic descriptor stack remove helper; this is cancel/stack maintenance support."
    },
    {
      "functionVa": 4403424,
      "functionVaHex": "0x004330e0",
      "endVaHex": "0x00433112",
      "size": 50,
      "categories": [
        "encounter",
        "scene"
      ],
      "refs": [
        {
          "name": "scene.randomGateThreshold",
          "vaHex": "0x004330fb",
          "category": "scene"
        },
        {
          "name": "scene.randomGateCounter",
          "vaHex": "0x00433109",
          "category": "scene"
        }
      ],
      "calls": [
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x004330eb",
          "category": "encounter"
        }
      ],
      "classification": "scene-random-gate",
      "promotion": "excluded-scene-random-gate",
      "reason": "scene/event random gate; previous field encounter scans exclude it as encounter RNG."
    },
    {
      "functionVa": 4404226,
      "functionVaHex": "0x00433402",
      "endVaHex": "0x00433545",
      "size": 323,
      "categories": [
        "encounter",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00433491",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x004334e2",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00433448",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00433463",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x004334e7",
          "category": "encounter"
        }
      ],
      "classification": "rng-descriptor-context-review",
      "promotion": "context-only",
      "reason": "RNG and descriptor state meet; previous scans usually classify these as generic VM/battle/status helpers unless field/map state is also present."
    },
    {
      "functionVa": 4405962,
      "functionVaHex": "0x00433aca",
      "endVaHex": "0x00433c99",
      "size": 463,
      "categories": [
        "encounter",
        "menu"
      ],
      "refs": [
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00433b37",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00433b68",
          "category": "menu"
        },
        {
          "name": "menu.descriptorCount",
          "vaHex": "0x00433b9b",
          "category": "menu"
        }
      ],
      "calls": [
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00433b3c",
          "category": "encounter"
        },
        {
          "name": "encounter.sharedRng",
          "vaHex": "0x00433bde",
          "category": "encounter"
        }
      ],
      "classification": "rng-descriptor-context-review",
      "promotion": "context-only",
      "reason": "RNG and descriptor state meet; previous scans usually classify these as generic VM/battle/status helpers unless field/map state is also present."
    }
  ],
  "reviewRequiredRows": [],
  "negativePromotions": [
    {
      "functionVaHex": "0x00423319",
      "reason": "save/load restore writes selected-root from selector bytes after reading persistent blocks; useful boundary, not live route producer."
    },
    {
      "functionVaHex": "0x0043022d",
      "reason": "field movement/collision controller has input+field+descriptor refs but no scene/encounter/top-menu materialization evidence."
    },
    {
      "functionVaHex": "0x0041d61b",
      "reason": "menu-internal dispatcher after menu object exists."
    },
    {
      "functionVaHex": "0x00431fe8/0x00432323/0x00432541",
      "reason": "generic descriptor stack helper layer; not the producer that chooses which root to attach."
    }
  ],
  "nextFrontier": [
    "Trace callers above the generic object/display VM handlers that choose descriptor roots before add/rebuild helpers run.",
    "Search for live writers of 0x004576da/0x004576db/0x0059de30 outside save/load restore and generic selector opcodes.",
    "For encounter, require one function/root to bridge field step/tick state with formation/resource setup, not merely shared RNG.",
    "For map animation, require a live animated-map object/root that reaches tile-write handlers before redraw."
  ]
}
