# Discovery markers during ordinary play `ERR_DiscoveryMap.c` now creates successor-owned objective markers with their label already set, refreshes the existing native text widget when knowledge changes, and prevents native annotation editing/dragging/deletion from altering objective facts. Discovery knowledge and location coordinates remain server-owned; local marker presentation adds no synchronization or mission progress authority. The installed native implementation establishes the defects: - `SCR_MapMarkerManagerComponent.InsertStaticMarker:169–175` assigns a local player owner and synchronously calls `OnCreateMarker`. - `SCR_MapMarkerBase.SetCustomText:198–201` changes only stored data. `OnCreateMarker:344–378` initializes a widget from that data; `OnUpdate:409–431` updates position, not label text. Previously a map already open during discovery could show a blank newly-created marker or retain `Unknown location` after identification until reopening. - `SCR_MapMarkersUI.IsOwnedMarker:114–123` controls editing and dragging at lines 1080,1287,1303. Its deletion entry and quickbind check `CanBeRemovedByOwner` at lines947,1049. Previously objective markers passed all these native checks, so a player could remove a discovery marker permanently or move it to a false coordinate; the successor's cached knowledge prevented restoration. The new `ERR_DiscoveryMarker` subclass changes only these authored local markers. It clears the insertion-assigned owner at the native creation boundary and marks itself nonremovable. Its label is scenario-authored rather than a player annotation, so its own creation and label updates use the native synchronous text path; unrelated player marker filtering and behavior remain unchanged. Label updates while closed retain model data for native recreation without creating duplicate markers. `ERR_NativeDiscoveryMapProbe.Run()` is an opt-in WORKBENCH check, to invoke once after a real local fixture participant and native marker manager exist. It creates two owned hidden native marker widgets: the unchanged vanilla marker demonstrates the stale text and user-annotation eligibility; the successor marker demonstrates immediate label refresh and protected ownership. It then detaches/recreates its own widget and checks retained text and exact marker-count cleanup. No mission locations, discovery state, inventories, map menus or player input are altered. Invoke `Stop()` from fixture cleanup if interrupted. [Archived 085442](evidence/native-2026-09-19-085442/report.json) now verifies this probe in each of two complete Core escape/restart rounds: 586 total assertions, zero engine or script/VM errors. In each round its eleven marker assertions exercise the actual hidden native layouts: vanilla stale-label/annotation eligibility, successor immediate refresh/protection, saved-label recreation and exact owned cleanup. The [raw log](evidence/native-2026-09-19-085442/console.log.txt) and [source manifest](evidence/native-2026-09-19-085442/source-sha256.json) bind those results to that snapshot; launch/stopped addon manifests and raw-log hashes match. No real map menu, drag/delete input or remote replication was exercised. Subsequent changes require their own current-source runtime qualification. `python3 tools/check.py` passed after the marker changes. The audit also inspected native prison gate inheritance/context, stock `SCR_OpenStorageAction`, radio tuning phase/knowledge checks and native helicopter/result presentation. Source alone does not establish held-input reachability, collision clearance while walking through the gate, dragging stock in a real inventory window or manual boarding/flying. These remain ordinary-play tests; direct completion fixtures cannot substitute for them. A separate inherited-gate destruction/progression vulnerability was reported for follow-up, without changing gate health in this marker patch. ## Rough clue position correction First-stage discovery previously hid only the marker label while retaining exact objective coordinates. It now shows the center of the containing 500 m square, labelled `Search area (500 m square)`. This is stable across refreshes and all clients; repeated observations cannot narrow the location by averaging randomized offsets. Identification moves the same marker to the exact rounded objective position and updates its label. An open map reactivates the marker for native visibility/position updates if the previous coarse position was culled. This is gameplay presentation, not concealment from clients inspecting replicated entities. The actual coordinate policy passes positive, negative, boundary and exhaustive local range checks. The existing native marker fixture additionally checks coarse and exact coordinate storage on the same marker; that revised native run remains pending. This does not claim manual map interaction or multiplayer qualification. Vanilla local-marker deletion removes only active membership. A culled objective can remain in the disabled list and later reappear. The successor now removes only its own local discovery-marker type from both lists and detaches that marker's native map-close/layer listeners on deletion; duplicate cleanup is safe and never reactivates or creates a widget. The native fixture now moves its owned marker into the actual disabled list before testing both-membership removal. Native verification of this extension is pending. The [100619 integrated Core regression](evidence/native-2026-09-19-100619/report.json) now passes the revised native coordinate and disabled-list cleanup fixture in each of two complete rounds (612 total assertions, zero captured errors). Earlier pending statements describe the pre-run changes; manual map interaction remains separate. ## Current intel presentation Partial clues use the native question-mark icon at the stable 500 m grid centre. Identification replaces it with the site-specific icon; mortar sites use artillery. The prison stays hidden. Messages match the owner’s original Intel addon. See [mortar intel and prison visibility](mortar-intel-and-prison-map.md).