Resume still skips the wait and runs immediately; after that job writes ended_at, the following cycle waits a full interval from that completion (ignoring stale_running cleanup rows).
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop clearing the wake event at sleep entry, keep force-sync skip until consumed, and make pause loops wait on the resume event so UI start kicks topology immediately.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire topology_auto_sync into resume/pause force-sync hints, ignore stale_running cleanup rows when computing the interval clock, and wait a full interval instead of pulling topology on every cold start.
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>
Restore sql_text and alarm-apply imports, slim WSS handshake headers to accessToken only, and treat 404/503 handshakes as lost subscriptions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore sqlalchemy.func and runtime helpers so alarms_current upsert and pause/resume no longer raise NameError 500s.
Co-authored-by: Cursor <cursoragent@cursor.com>
Restore ume_verify_tls=false so onsite UME login works without a .env override; production should set NETX_UME_VERIFY_TLS=true or pin a CA.
Co-authored-by: Cursor <cursoragent@cursor.com>
Point .env.example at NETX_UME_VERIFY_TLS=false for self-signed UME and surface the same hint on certificate verify login failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep connect/delete/move as dirty local edits until Save, use straight edges again, and drop Visio side handles so lines attach at the NE center like discovered links.
Co-authored-by: Cursor <cursoragent@cursor.com>
Project-neighbors supports dry_run for local dirty canvas; Save flushes adds. Connect mode uses drag-from side anchors with smoothstep elbows instead of click-click.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add a Display toggle to show placeholders; hide their incident edges and skip them in canvas find while hidden.
Co-authored-by: Cursor <cursoragent@cursor.com>
Queue fabric edge deletes until Save with undo-safe pending state; hard-delete topology/LLDP placeholders from the canvas; purge fully orphaned fabric nodes after inventory detach, with a periodic reconcile GC.
Co-authored-by: Cursor <cursoragent@cursor.com>
Sync the canvas auto-add toggle with the shared LLDP collect policy so topology collect and canvas discover stay consistent.
Co-authored-by: Cursor <cursoragent@cursor.com>
Toolbar and pane context menu create placeholders that follow the same setup path as LLDP in NE management and WebCRT.
Co-authored-by: Cursor <cursoragent@cursor.com>
Claim the existing placeholder in place and promote source to webcrt instead of prompting for password-only auth.
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid the corner-only first paint on slow layouts by deferring fitView until the container is ready and re-fitting on resize.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align collection tasks with LLDP/config-sync chrome, and refresh active-task overview when jobs change.
Co-authored-by: Cursor <cursoragent@cursor.com>
Match the right-side chrome (tab strip and toolbar) to the dark ops shell instead of the leftover light panels.
Co-authored-by: Cursor <cursoragent@cursor.com>
LLDP job detail, config-sync cycle tasks, and UME fold panels now use the shared modal layout; workbench section label is 系统对接.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move the inline config viewer into the shared modal chrome so viewing stays consistent with other network management dialogs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lay out toggles and color pickers side by side with a viewport-capped height so the menu no longer runs off-screen.
Co-authored-by: Cursor <cursoragent@cursor.com>
Layer the original PNG under a color blend tint so luminosity highlights stay visible while brand hues remain editable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist choices in localStorage, apply via canvas CSS variables, and tint router icons with mask fills so each vendor color is editable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Disable labelShowBg for straight edges and suppress the default SVG textbg so link numbers render as text only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop header netx-api/oclaw pills, restore UME/OClaw runtime rows in ops tasks, and raise node/edge label contrast on the dark canvas.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the light section border and help-control colors so the bottom slice block no longer shows a white hairline.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align the default canvas background, region list, and canvas name styles with the dark ops shell, and migrate the old light canvas default.
Co-authored-by: Cursor <cursoragent@cursor.com>
Workbench styling pulled fonts.googleapis.com which often stalls ~5s on blocked networks; switch to local system font stacks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Lazy-load module routes, restyle remaining light cards/modals/sidebars, and let canvas background be tuned from the display menu.
Co-authored-by: Cursor <cursoragent@cursor.com>