---
title: Troubleshooting
description: What to check when a signal stops
---

# Troubleshooting

**Metrics stop but the service is up.** Check `codingagent.selfobs.ingest_lag` first. A stalled
source reads as a quiet period, not as an error.

**A record type vanished after a client upgrade.** `codingagent.selfobs.unhandled_record_types` and
`codingagent.drift_findings`. Run `ca2probe` against a fresh sample and compare to the baseline.

**Tool counts doubled for Codex.** Deduplication on item id regressed.
`response_item:custom_tool_call` and `event_msg:item_completed` describe the same call.

**A metric dimension collapsed to `other`.** The value hit `metrics.dimension_cap`. Check
`codingagent.selfobs.attribute_rejections` and decide whether the allowlist needs widening or the
field belongs in `AttrRecord` instead.

**TTFT is empty for Claude Code.** Correct. Claude Code transcripts carry no measured TTFT and a
derived value must never enter that instrument.

**Cost is missing for most sessions.** `cost-state` is present in only a minority of Claude Code
sessions and Codex has none at all. Native `claude_code.cost.usage` is the live source.

**Nothing exports and there is no error.** Configuration validation. An unknown key is an error at
startup; check the service logs for the validation failure rather than assuming the endpoint.
