ae9f906f52
Reviewer H1 (v3 regression): the endpoint→DeviceConfig split ADDED the endpoint to DeviceConfig but the driver forms still serialized it into DriverConfig at defaults. Single-device worked only by an STJ case-insensitive last-key-wins accident; a 2nd device on a single-top-level-Host driver (Modbus/S7) silently reverted to the driver-form default (host=127.0.0.1). Fix: Modbus/S7/OpcUaClient driver-form GetConfigJson strips the endpoint keys (host/port/unitId; host/port/rack/slot; scalar endpointUrl) from the serialized channel config, leaving DeviceConfig as the sole source (OpcUaClient keeps its endpointUrls failover list, which is driver-level policy). Enum-serialization verified CLEAN fleet-wide; ImportTagsAsync all-or-nothing verified; RawTree wiring sound. Deferred (documented in PR): H2 pre-existing Modbus/S7 form TimeSpan vs factory *Ms-int DTO mismatch (authored durations dropped — predates v3); M1 CSV export drops non-columned alarm sub-keys; M2 blank flag column clobbers a base-JSON isHistorized/isArray; M3 OpcUaClient device/driver endpoint precedence; L1 unused LoadMergedProbeConfigAsync; L5 refresh collapses sibling expansion. Claude-Session: https://claude.ai/code/session_01LVneM3eh1UtJxEisFXgmox