The merge engine picks the newest modifiedAt per (deviceId, moduleId) across linked connectors. If two Octi-server accounts disagree on wall-clock time, the merge can pick the wrong winner — a stale payload from a clock-ahead server beats a fresher one from a clock-correct server. Detect when two connectors report the same device with modifiedAt values inconsistent with their lastSeen ordering, surface a one-line issue in the Issues panel, and treat skew-suspect modules as ties for merge purposes (deterministic tiebreak on connectorId, same as missing-modifiedAt today). Android handles this in its sync layer; web does not yet.
The merge engine picks the newest modifiedAt per (deviceId, moduleId) across linked connectors. If two Octi-server accounts disagree on wall-clock time, the merge can pick the wrong winner — a stale payload from a clock-ahead server beats a fresher one from a clock-correct server. Detect when two connectors report the same device with modifiedAt values inconsistent with their lastSeen ordering, surface a one-line issue in the Issues panel, and treat skew-suspect modules as ties for merge purposes (deterministic tiebreak on connectorId, same as missing-modifiedAt today). Android handles this in its sync layer; web does not yet.