You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
proxy/promexport.go is a hand-maintained list of promLine(&b, …, s.<Field>) calls with nothing
asserting that every metrics.Snapshot field is either exported or deliberately exempt. That is how cg_expand_unresolved_total went unexported and how cg_frozen_decisions_total shipped reading a
permanent 0 (#154).
The coverage test added in #155 reflects over Snapshot's 66 fields and requires each to be exported
or listed with a reason. Fourteen are recorded there as genuine gaps rather than exempted to make
the test pass. Listing them here so they are trackable outside a test file.
Alertable — how you would notice a component silently failing
Field
Why it matters
SummarizeTimeouts, SummarizeErrors
summarize restructures the whole transcript. Silent failure means no compaction and no signal.
AgentDietTimeouts, AgentDietErrors
Same, for the agentdiet reflection pass.
LLMTruncated
A cheap-model reply cut short produces a partial filter. Distinguishable from an error only by this counter.
cg_llm_errors_total and cg_llm_timeouts_totalare exported for extract_llm, so the pattern
exists and these three components simply never got the same treatment.
Savings denominators
Field
Why it matters
AttemptedTokens
The divisor for "of what we tried to compact" — one of the four labelled denominators.
FrozenTokens
The cache-frozen ceiling. /metrics cannot express why savings plateaued without it.
SavingsPctAttempted, SavingsPctNewInput
Two of the four headline ratios.
The dashboard makes a point of naming what each denominator divides by; Prometheus currently cannot
compute any of them, because the divisors are not exported.
proxy/promexport.gois a hand-maintained list ofpromLine(&b, …, s.<Field>)calls with nothingasserting that every
metrics.Snapshotfield is either exported or deliberately exempt. That is howcg_expand_unresolved_totalwent unexported and howcg_frozen_decisions_totalshipped reading apermanent 0 (#154).
The coverage test added in #155 reflects over
Snapshot's 66 fields and requires each to be exportedor listed with a reason. Fourteen are recorded there as genuine gaps rather than exempted to make
the test pass. Listing them here so they are trackable outside a test file.
Alertable — how you would notice a component silently failing
SummarizeTimeouts,SummarizeErrorssummarizerestructures the whole transcript. Silent failure means no compaction and no signal.AgentDietTimeouts,AgentDietErrorsagentdietreflection pass.LLMTruncatedcg_llm_errors_totalandcg_llm_timeouts_totalare exported forextract_llm, so the patternexists and these three components simply never got the same treatment.
Savings denominators
AttemptedTokensFrozenTokens/metricscannot express why savings plateaued without it.SavingsPctAttempted,SavingsPctNewInputThe dashboard makes a point of naming what each denominator divides by; Prometheus currently cannot
compute any of them, because the divisors are not exported.
Remaining
SyncEnforced,CompactionResets,UpstreamMsAvgBypassed,SSETTFBMsAvgBuf,SSEExpandAfterStream.Notes for whoever picks this up
style the neighbours use —
proxy/promexport_help_test.goenforces a convention about thecg_*-vs-dashboard disagreement sentence. This is real review surface, not boilerplate, which iswhy fix(dash): report unpriced components in tokens, state the cache-frozen ceiling, and export the counters that only reached /stats #155 did not bulk-add them.
renderMetricsholds the bareh.agg.Snapshot(), and fields the/statshandler fills are zero at export time. That is the fix(metrics): cg_frozen_decisions_total reports 0 on every scrape — renderMetrics never fills the Snapshot fields it reads #154 trap — check the source before wiring a
field, or you will export a constant. Read the counter from its owner the way the
cg_llm_*familydoes.
notExportedWhy. Stale entries fail the test, so thelist cannot drift out of date in either direction.
CLAUDE.md:31claims OpenTelemetrygen_ai.*semantic conventions, which is aspirational —all 60 existing metrics are
cg_*(chore: CLAUDE.md claims gen_ai.* semconv, but all 60 metrics are cg_* #146). Follow thecg_*convention here; this is not the placeto start a semconv migration.