[content] Observability — content resolution metrics
## Problem to Solve Content resolution introduces a new external dependency (Gitaly) into the query hot path. We need metrics to monitor latency, cache effectiveness (for Phase 2), batch sizes, and error rates. ## Proposed Solution Add Prometheus metrics to the `ContentResolver` implementations: **Metrics**: - `gkg_content_resolve_duration_seconds` (histogram, labels: `outcome={cache_hit,cache_miss,gitaly_direct,error}`) - `gkg_content_resolve_batch_size` (histogram) — distribution of batch sizes - `gkg_content_blob_bytes` (histogram) — distribution of resolved blob sizes - `gkg_content_resolve_total` (counter, labels: `outcome`) - `gkg_content_gitaly_calls_total` (counter) — number of list_blobs RPCs Phase 2 will add Valkey-specific metrics (hit/miss counters, circuit breaker state, write-back errors). ## Acceptance Criteria - [ ] All metrics registered and emitted by GitalyDirectContentResolver - [ ] Metrics follow existing GKG naming conventions (check `labkit-rs` patterns) - [ ] Dashboard JSON or Grafana panel definitions (follow `helm/local/` patterns) - [ ] Latency histogram has appropriate buckets for Gitaly call latency (1ms–5s)
issue