turnstone/web
pyr0ball 502ff54fd0 feat(ui): security alert dedup, clickable criticals, loading shimmer
Security Alerts:
- Client-side duplicate collapsing via anomaly_label + text fingerprint
- ×N count badge chip on collapsed rows; toggle to expand
- Skeleton shimmer rows replace "Loading..." text

Dashboard:
- Clickable Recent Criticals — inline LLM explanation via SSE stream
- ±5 min time window scoped to source_id for useful context
- Explanation cache keyed by entry_id (no re-fetch on re-expand)
- Default diagnose query injected on Diagnose button navigation to
  prevent local models hallucinating from bare log data
- Stat card and source-health skeleton shimmer loading states

Backend:
- anomaly.py: 4-attempt retry on "database is locked" with 10s backoff
- search.py: migrate build_fts_index to get_conn() (WAL race fix);
  add timeline_events to stats_summary for clickable criticals feature
- theme.css: @keyframes shimmer + .loading-shimmer utility;
  prefers-reduced-motion degrades gracefully to static muted block
2026-06-13 09:32:26 -07:00
..
src feat(ui): security alert dedup, clickable criticals, loading shimmer 2026-06-13 09:32:26 -07:00
index.html feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00
package-lock.json feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00
package.json feat: Alpha milestone — corpus management, upload ingest, harvester agent 2026-05-19 07:45:58 -07:00
tsconfig.json feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00
uno.config.ts feat: dark/light theme — CSS variables, OS preference, toggle button 2026-05-09 16:20:07 -07:00
vite.config.ts feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00