Production crashlooped on startup: ExchangeMatchEvaluator autowires the concrete ClickHouseSearchIndex (for countExecutionsForAlerting, which lives only on the concrete class, not the SearchIndex interface), but StorageBeanConfig declared the bean with interface return type SearchIndex. Spring matches autowire candidates by declared bean type, not by runtime instance class, so the concrete-typed autowire failed with: Parameter 0 of constructor in ExchangeMatchEvaluator required a bean of type 'ClickHouseSearchIndex' that could not be found. ClickHouseLogStore's bean is already declared with the concrete return type (line 171), which is why LogPatternEvaluator autowires fine. All alerting ITs passed pre-merge because AbstractPostgresIT replaces the clickHouseSearchIndex bean with @MockBean(name=...) whose declared type IS the concrete ClickHouseSearchIndex. The mock masked the prod bug. Follow-up: remove @MockBean(name="clickHouseSearchIndex") from AbstractPostgresIT so the real bean graph is exercised by alerting ITs (and add a SpringContextSmokeIT that loads the context with no mocks). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cameleer UI
React SPA built with @cameleer/design-system v0.1.28, TanStack Query, and Zustand.
Development
npm install
npm run dev
By default the dev server proxies /api/* to http://localhost:8081. To proxy to a remote server instead:
VITE_API_TARGET=http://192.168.50.86:30081 npm run dev
No CORS issues — Vite's proxy makes API calls server-side.
Build
npm run build
API Types
Regenerate TypeScript types from a running backend:
npm run generate-api # Requires backend running on :8081
Key Features
- Composable sidebar with accordion behavior (Applications / Starred / Admin sections)
- Context-aware cmd-k search: shows apps/routes/exchanges on operational pages, users/groups/roles on admin pages
- LIVE mode toggle: when ON, queries poll at intervals (5s-30s); when OFF, sidebar clicks trigger manual refresh
- Route control bar with state-aware buttons (start/stop/suspend/resume) and confirmation dialogs
- Event-type icons in agent timeline with severity-based coloring