Systematize Faz 4 + close three observability gaps:
- WMI opportunity radar (getWmiOpportunities): group query_logs by
substring(vin,1,3) = WMI, rank low-success WMIs by distinct-user demand.
brandMatched=0 flags fully-uncovered manufacturer codes. Surfaced on the
Trends page (#wmi) + a dashboard header shortcut. Replaces the manual Faz 4.
- Per-source p50: add percentile_cont(0.50) to getProviderAttempts and
getProviderDeepStats; show P50·P95 on the dashboard and provider drill-down.
- unknown_vin_spike anomaly: track "tanınamadı" rate in the 15min/baseline
windows, fire when it jumps >=2x baseline (or surges from ~0), and attribute
the dominant failing source (+aborted count) in the Telegram message. Runs
in the existing 5min anomaly cron; worker/telegram unchanged (generic type).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes Phase 8: long-term capacity view + per-provider deep dive.
Alert-threshold config UI deferred to teknikborc — the cron defaults
are well-calibrated enough to ship without a config table.
Trends page — /projects/sase/vin-decode/trends
1. Son 90 gün — daily decode volume sparkline, success/total ratio
shading.
2. Haftalık büyüme — WoW % change for last 12 weeks, color-coded.
3. Provider yük dağılımı — stacked area for the last 30 days, one bar
per day decomposed by winning provider; legend below.
4. Düşük destekli markalar — brands with ≥20 30d volume but ≤75%
success. New-provider/decoder investment signal.
5. Peak heatmap — 7×24 grid (day-of-week × hour) for the last 30d,
intensity-shaded; B2B working-hours pattern + infra scaling guide.
6. Cache hit trend — daily cache hit rate sparkline + 30d average.
7. Verimlilik composite — daily score combining success (50%), cache
(20%), latency (20%, 1.0 at <500ms decaying to 0 at >10s), and
1-fallback (10%). 14-day table view.
Provider drill-down — /providers/[name]?range=7d|30d
- Four KPIs: wins total, success rate, avg/P95 latency, chain-attempt
count (separately tracked for chain key vs winning-source).
- Daily wins sparkline scoped to the range.
- Top 10 brands the provider successfully decoded for.
- Fallback chains the provider participated in.
- 20 most recent failures with sanitized VIN + user-link drill.
Dashboard wiring
- Winning-provider and provider-attempts cards on the main VIN
dashboard now link each provider row to /providers/[name]. The
timings-key aliases (pcat → parts-catalogs, vin_api → vin-api) are
remapped so the link reaches the right page.
- New "Trends →" pill in the header next to "Business →".
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>