Live TopoNodes use MD=...;ME=<uuid> / SBN=<uuid> without nodeId; extract those uuids as stable PKs and parent refs so reconcile drops old name:hash rows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use savepoint upserts with payload dedupe, finalize jobs on a fresh sibling session, serialize concurrent topology syncs, and reap stale running rows so the scheduler does not keep spawning orphans.
Co-authored-by: Cursor <cursoragent@cursor.com>
Phase-1 docks both topology APIs without writing Fabric; expose a 24h topology_auto_sync task and domain=topology manual sync for later LLDP alignment.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop infinite reconnect loops when ZTE returns HTML 500 for a dead stream id and surface re-establish in the UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
Detect missing UME subscriptions from WSS/DELETE errors, stop stale reconnects, and prompt to clear local state before re-establishing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use DELETE delete-subscription, refresh token before cancel, recover orphan subs on establish, and keep local state when UME delete fails.
Co-authored-by: Cursor <cursoragent@cursor.com>
Only treat UUID-like values as net_id. Prefer extracting ME{uuid} from objectName and ignore ME{numeric} wrappers found in alarmkey so alarms join inventory correctly.
Also constrain legacy alarmkey split formats (#, csv, space) to UUID-like prefixes.
Co-authored-by: Cursor <cursoragent@cursor.com>
When alarmkey does not contain a net_id, fall back to extracting ME{net_id} from objectName so alarms can join inventory correctly. Add regression coverage for the ME{} objectName pattern.
Co-authored-by: Cursor <cursoragent@cursor.com>
Support UME alarmkey values like "<net_id> <x> <y>" when deriving ne_id so current alarms can join inventory correctly. Add regression coverage for hash, csv, and space-delimited alarmkey formats.
Co-authored-by: Cursor <cursoragent@cursor.com>
After a complete marker pull (is_end_of_reply, no iterator/dup abort), delete local NE/holders and current alarms not present in this batch. Replace 48h-only current-alarm expiry. Flush before bulk delete to avoid ORM stale updates. Job/batch JSON records deleted counts and reconcile flags.
Co-authored-by: Cursor <cursoragent@cursor.com>