Two sidebar bugs fixed: 1. Route entries never highlighted on navigation because sidebar-utils generated /apps/ paths for route children while effectiveSelectedPath normalizes to /exchanges/. The design system does exact string matching. 2. Routes disappeared from sidebar when agents had no recent exchange data. Heartbeat carried routeStates (with route IDs as keys) but AgentRegistryService.heartbeat() never updated AgentInfo.routeIds. After server restart, auto-heal registered agents with empty routes, leaving ClickHouse (24h window) as the only discovery source. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>