- Add amber dot indicators to group headers with hover scale effect
- Replace hard divider lines with gradient fade separators
- Active nav item gets rounded pill with amber glow box-shadow
- Section chevrons start subtle (25% opacity), reveal on hover
- Expand/collapse adds opacity fade alongside CSS grid height animation
- Chevron rotation uses spring-like cubic-bezier bounce easing
- Child items get gradient guide line and active dot indicator
- Press feedback via scale(0.98) on :active for all nav items
- Collapsed rail active state uses small amber left bar
- Footer divider uses gradient fade, version text fades on collapse
- Sidebar background uses subtle vertical gradient
- Right edge border gets amber-tinted gradient glow at center
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The exception-dashboard showed a "Live updates unavailable" error banner
immediately on page load because the SSE event stream endpoint returns an
error on fresh installs. The SSE stream is a live-update enhancement, not
critical functionality. Silently degrade when the stream is unavailable
instead of showing an alarming error banner.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root cause: derToJoseSignature() used bytes[0]===0x30 to detect DER format,
but raw P1363 ECDSA signatures have a ~1/256 chance of their first byte
being 0x30, causing spurious DER parse attempts and "expected INTEGER for r"
errors. This broke DPoP proof generation intermittently, failing console
context loads on random pages.
Fix: detect raw P1363 by checking byte length matches expected curve size
(64 for ES256, 96 for ES384) before inspecting content bytes. Only attempt
DER parsing after full structural validation confirms SEQUENCE+INTEGER
structure. Also pass componentSize from the algorithm so ES384 signatures
are handled correctly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Valkey messaging transport auto-reconnection:
- MessagingTransportClient: detect persistent Redis failures (5 consecutive)
and exit processing loops instead of retrying forever with dead connection
- IMicroserviceTransport: add TransportDied event to interface
- RouterConnectionManager: listen for TransportDied, auto-reconnect after 2s
- Fixes services becoming unreachable after Valkey blip during restarts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plugin assemblies loaded via PluginHost into isolated AssemblyLoadContexts
produce distinct types even from the same DLL. When AppDomain.GetAssemblies()
returns both Default and plugin-ALC copies, DI registration and IOptions<T>
resolution silently fail (e.g. ValkeyTransportOptions defaulting to localhost).
Applied AssemblyLoadContext.Default filter to all 7 assembly discovery sites:
- MessagingServiceCollectionExtensions (transport plugin scan)
- StellaRouterIntegrationHelper (transport plugin loader)
- Gateway.WebService Program.cs (startup transport scan)
- GeneratedEndpointDiscoveryProvider (endpoint provider scan)
- ReflectionEndpointDiscoveryProvider (endpoint attribute scan)
- ServiceCollectionExtensions (schema provider scan)
- MigrationModulePluginDiscovery (migration plugin scan)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>