UNINTEGRATED PROTOTYPE — native compilation/rendering required before admission

Current target untouched. fix.patch has 3 script files (one new), own layout+meta, existing mine-test adapter, and new actual-method overlay regression. Exact baseline hashes and unchanged-current-target comparison are in source-manifest.json; baseline/ retains original bytes.

Supported presentation approach:
ERR_ObjectiveMapElement derives SCR_MapUIElement, as vanilla task UI does. Quantized authored site/mine data is presented outside SCR_MapMarkerManagerComponent static annotation arrays. No SetBlocked override, no user/platform restriction changes, no task entities and no new position discovery. Existing ERR_DiscoveryMarker remains data/API compatibility. Two producer calls switch to own ERR_InsertDiscoveryMarker adapter. Old static removal remains solely defensive/legacy native-probe compatibility.

Checks:
overlay-green.log: actual Start/SetData/Refresh/Close/Clear/Stop/ownership with native doubles; delayed initial controller/widget, map reopen, rough->exact data, pan/zoom/culling, reused config/new canvas, multiple independent owners, stop and missing handler retry.
mine-green.log: existing actual mine service/marker lifecycle adapted only for new insertion adapter.
canvas-mutation-red.log: removing exact canvas identity compiles then fails actual replacement-cleanup assertion. This is a mutation control, NOT a baseline native rendering reproduction.
Native UGC compatibility finding remains SDK source evidence, not a restricted-platform run.

SDK API checks:
scripts/Game/Map/SCR_MapEntity.c:86-100 declares open/close config, pan(float,float,bool), zoom(float). WorldToScreen904-920 adds DPI-scaled pan but no parent origin. Native MapUIElementContainer.UpdateIcons uses same WorldToScreen+DPIUnscale relative UI positioning. New canvas-child anchoring requires native verification.
CloseMap324-331 calls OnMapClose synchronously before IsOpen=false; OnMapClose377-380 invokes current config, without queued callback. Closed(config) clears only retained same config. An artificial delayed close with reused identical config cannot be distinguished and is NOT proven safe; no native delayed source found.
Native GetMapVisibleFrame207 returns cached state updated after map callbacks/frame. Overlay instead culls against current transformed pixel coordinates and current canvas screen dimensions.
SCR_MapUIElement base has no OnUpdate override; HandlerAttached tolerates absent highlight/gradient; OnClick only calls overridden no-op SelectIcon when visible. Layout ignores cursor on root/image/text. Native hit testing remains unverified.

HARD next gates (one bounded opt-in native fixture before normal rollout):
1. Compile new class/layout/resource; register test/resource manifest separately; root owns check.py.
2. Actually render known rough and exact objective overlay on ordinary M-key map; verify icon centered on coordinate and exact text updates, including long mine warning labels. Root alignment(.5,.28125) centers36px icon within64px overall box.
3. Pan/zoom/cull and close/reopen, with overlay inside correct parent canvas at multiple UI scales. Verify no click/drag/delete/input interception and unchanged normal annotations/privacy behavior.
4. Shared held-map500ms capture: verify overlay participates in RT surface without altering normal map/camera ownership.
5. JIP/missing controller and mission/location deletion cleanup, map replacement. No duplicate widgets/subscriptions or old native static marker entries.
6. Existing ERR_NativeDiscoveryMapProbe checks legacy static-marker API; it does NOT validate the new path and must not be reported as new overlay evidence. Add new fixture rather than silently reinterpret old claims.

Do not apply prototype until review and explicit parent integration. This heartbeat package contains only previously validated owner fixes.
